为什么我仅限于将NamedQuery注释放在实体类上

时间:2015-07-23 01:59:40

标签: java hibernate jpa orm

放置命名查询注释的逻辑位置在数据访问类上,该类处理实体的保存,检索等数据。

但是,Hibernate抛出异常"没有为该名称定义查询"如果我将一个NamedQuery注释放在没有用@Entity标记的类上。

为什么Hibernate或JPA限制命名查询仅限于实体?它可能是未来的功能吗?

有一些粗略的解决方法,比如使用 empty entity to hold queries,这让我觉得不受此限制是有用的。我知道我可以使用XML配置,但对非实体的命名查询仍然有用。

1 个答案:

答案 0 :(得分:1)

如果您查看JpaRepository,可以看到您可以通过其他方式声明它们:

基于注释的命名查询配置

@Entity
@NamedQuery(name = "User.findByEmailAddress",
  query = "select u from User u where u.emailAddress = ?1")
public class User {

}

使用@Query

在查询方法中声明查询
public interface UserRepository extends JpaRepository<User, Long> {

  @Query("select u from User u where u.emailAddress = ?1")
  User findByEmailAddress(String emailAddress);
}