Java 为什么我只能在实体类上放置NamedQuery注释
命名查询注释位于数据访问类上,该类处理实体的保存、检索等数据的逻辑 但是,如果我在未标记为@Entity的类上放置NamedQuery注释,Hibernate会抛出一个异常“没有为该名称定义查询” 为什么Hibernate或JPA限制命名查询只放在实体上?它会成为未来的特色吗 有一些粗略的解决方法,例如使用 ,这使我认为不受这样的限制是有益的。我知道我可以使用XML配置,但对非实体的命名查询仍然很有用 如果您选中,您可以看到您可以用其他方式声明它们: 基于注释的命名查询配置Java 为什么我只能在实体类上放置NamedQuery注释,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,命名查询注释位于数据访问类上,该类处理实体的保存、检索等数据的逻辑 但是,如果我在未标记为@Entity的类上放置NamedQuery注释,Hibernate会抛出一个异常“没有为该名称定义查询” 为什么Hibernate或JPA限制命名查询只放在实体上?它会成为未来的特色吗 有一些粗略的解决方法,例如使用 ,这使我认为不受这样的限制是有益的。我知道我可以使用XML配置,但对非实体的命名查询仍然很有用 如果您选中,您可以看到您可以用其他方式声明它们: 基于注释的命名查询配置 @Entity @N
@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);
}
public interface UserRepository扩展了JpaRepository{
@查询(“从用户u中选择u,其中u.emailAddress=?1”)
用户findByEmailAddress(字符串emailAddress);
}
这是弹簧特有的功能吗?我不认为这是JPA或Hibernate的一部分。谢谢你的链接。如果不使用Spring,您知道有什么解决方案吗?看看这个:您可以将查询添加到包信息.java
文件中。一些JPA实现允许它们位于任何类上,只是如果您将它们作为托管类添加到persistence.xml
中,JPA规范和您选择的实现不会发生什么?