العثور على المستخدمين الذين يكونون اليوم مع JPA

StackOverflow https://stackoverflow.com/questions/2555791

سؤال

لدي طاولة مع المستخدمين وأحاول الحصول على قائمة مع الأشخاص الذين لديهم عيد ميلاد اليوم حتى يتمكن التطبيق من إرسال بريد إلكتروني.

يتم تعريف المستخدم على أنه

@Entity
public class User {

    @Size(max = 30)
    @NotNull
    private String name;

    [...]
    @Temporal(TemporalType.DATE)
    @DateTimeFormat(style = "S-")
    protected Date birthday;
}

ولدي طريقة تعيد الأشخاص الذين ولدوا اليوم مثل ذلك

@SuppressWarnings("unchecked")
public static List<User> findUsersWithBirthday() {

 List<User> users = 
  entityManager().createQuery("select u from User u where u.birthday = :date")
    .setParameter("date", new Date(), TemporalType.DATE)
    .getResultList();
  return users;
}

هذا أمر جيد وكل ذلك للعثور على أشخاص وُلدوا اليوم ، ولكن هذا ليس مفيدًا حقًا ، لذلك كنت أعاني من أجل طريقة للعثور على جميع المستخدمين الذين ولدوا اليوم ، بغض النظر عن العام.

باستخدام MySQL هناك وظائف يمكنني استخدامها مثل

select month(curdate()) as month, dayofmonth(curdate()) as day

ومع ذلك ، كنت أعاني من أجل العثور على JPA مكافئة لذلك.

أنا أستخدم Spring 3.0.1 و Hibernate 3.3.2

هل كانت مفيدة؟

المحلول

لا أعرف كيف أفعل ذلك في JPQL ولكن HQL لديه day() و month() وظائف حتى تتمكن من تشغيل:

from User u 
where day(u.birthday) = day(CURRENT_DATE) 
and month(u.birthday) = month(CURRENT_DATE) 

إذا لم يكن استخدام HQL خيارًا ، فسأذهب إلى استعلام أصلي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top