【发布时间】:2016-03-05 10:13:03
【问题描述】:
我在下面设计了两个实体“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;
}
我创建了两个 JPQL 来在我的 Main 方法中选择表。
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()
);
第一个选择 Board 的 JPQL 工作正常,但其他 JPQL 不是。程序打印出意外令牌的异常:Member。 JPQL 是否没有政策支持实体名称包含某些特定字符串,例如“成员”?我无法理解此异常消息。
我附上了运行时上述代码期间打印的异常消息。
================================================ =============================
我解决了这个问题。 Member 类和 Board 类在默认包中,我移到了一些包中。
但是为什么 JPQL 在默认包中不能完全工作?
【问题讨论】:
-
MEMBER 是一个 JPQL 关键字,任何 JPA 文档都会告诉你。这就是为什么您可以使用“entityName”来引用您的实体,以便您使用非关键字。由于您将您的设置为“jpqlMember”,那么您应该使用该名称引用实体
-
@NeilStockton tnx 回答。但它似乎在不是默认包而是由我创建的包中工作正常。为什么 JPQL 的工作如此不完整?
-
"JPQL" 不做任何事情,它只是查询的语言规范。您的 JPA 实现是正在执行(或不执行)操作,因此建议您将注意力转向 Hibernate。除此之外,您的列表显示您在这种情况下没有使用“jpqlMember”,因此它将失败。此外,您不需要作为第二个参数传入的实体类...这是默认值。