JPQL 不适用于 "Member" 实体
JPQL does not work on "Member" entity
下面我设计了两个实体"Member"和"Board".
@Entity(name = "jpqlBoard")
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String title;
}
@Entity(name = "jpqlMember")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String title;
}
我在 Main 方法上创建了两个 JPQL 到 select 表。
String jpql = "select b from jpqlBoard b";
System.out.println(
em.createQuery(jpql, Board.class).getResultList()
);
jpql = "select m from jpqlMember m";
System.out.println(
em.createQuery(jpql, Member.class).getResultList()
);
第一个 JPQL 到 select 板工作正常,但其他 JPQL 不是。程序打印异常表示意外标记:成员。 JPQL 是否没有政策支持实体名称包含一些特定的字符串,例如 "Member"?我无法理解此异常消息。
我附上了在运行时上面的代码中打印的异常消息。
============================================= =============================
我解决了这个问题。成员 class 和董事会 class 在默认包中,我移到了某个包中。
但为什么 JPQL 在默认包中工作不完整?
我认为对成员 class 的查询最初返回错误的原因 -
当您将 Member
class 放在 default
包中时,您的应用程序没有扫描 @Entity
注释。当您尝试 运行 Member
class 上的 JPQL 时,Hibernate
将查找 jpqlMember
的映射,并将 QuerySyntaxException
作为 class 未扫描,将无法找到。
稍后,当您将它移动到 Board
class 所在的同一个包时,它会成功扫描您的 Member
class 并且您的查询得到执行而没有任何错误.
如果在配置 sessionFactory
bean 时设置 packagesToScan="com.app.models"
属性,则需要确保所有实体都存在于该包中。
下面我设计了两个实体"Member"和"Board".
@Entity(name = "jpqlBoard")
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String title;
}
@Entity(name = "jpqlMember")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String title;
}
我在 Main 方法上创建了两个 JPQL 到 select 表。
String jpql = "select b from jpqlBoard b";
System.out.println(
em.createQuery(jpql, Board.class).getResultList()
);
jpql = "select m from jpqlMember m";
System.out.println(
em.createQuery(jpql, Member.class).getResultList()
);
第一个 JPQL 到 select 板工作正常,但其他 JPQL 不是。程序打印异常表示意外标记:成员。 JPQL 是否没有政策支持实体名称包含一些特定的字符串,例如 "Member"?我无法理解此异常消息。
我附上了在运行时上面的代码中打印的异常消息。
============================================= =============================
我解决了这个问题。成员 class 和董事会 class 在默认包中,我移到了某个包中。
但为什么 JPQL 在默认包中工作不完整?
我认为对成员 class 的查询最初返回错误的原因 -
当您将 Member
class 放在 default
包中时,您的应用程序没有扫描 @Entity
注释。当您尝试 运行 Member
class 上的 JPQL 时,Hibernate
将查找 jpqlMember
的映射,并将 QuerySyntaxException
作为 class 未扫描,将无法找到。
稍后,当您将它移动到 Board
class 所在的同一个包时,它会成功扫描您的 Member
class 并且您的查询得到执行而没有任何错误.
如果在配置 sessionFactory
bean 时设置 packagesToScan="com.app.models"
属性,则需要确保所有实体都存在于该包中。