放置命名查询注释的逻辑位置在数据访问类上,该类处理实体的保存,检索等数据。
但是,Hibernate抛出异常"没有为该名称定义查询"如果我将一个NamedQuery注释放在没有用@Entity标记的类上。
为什么Hibernate或JPA限制命名查询仅限于实体?它可能是未来的功能吗?
有一些粗略的解决方法,比如使用 empty entity to hold queries,这让我觉得不受此限制是有用的。我知道我可以使用XML配置,但对非实体的命名查询仍然有用。
答案 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);
}