3

ユーザーのテーブルがあり、アプリが電子メールを送信できるように、今日誕生日の人のリストを取得しようとしています。

ユーザーは次のように定義されます

@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 を使用しています

4

1 に答える 1

2

JPQLでそれを行う方法はわかりませんが、HQLには次のような機能がday()ありmonth()ます。

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

HQLを使用するオプションがない場合は、ネイティブクエリを使用します。

于 2010-03-31T20:53:15.187 に答える