JPQL不适用于“Member”实体

时间:2015-12-01 13:09:53

标签: hibernate jpa jpql

我在下面设计了两个实体“会员”和“董事会”。

@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则没有。程序打印异常即意外令牌:成员。 JPQL是否没有策略支持实体名称包含一些特定的字符串,如“Member”?我无法理解这个异常消息。

我附上了在运行时上面代码中打印的异常消息。

enter image description here

=============================================== ===========================

我解决了这个问题。会员类和Board类在默认包中,我移入了一些包。

但是为什么JPQL在默认包中不完整?

1 个答案:

答案 0 :(得分:1)

我认为Query on Member类最初返回错误的原因是什么 -

当您将应用程序放入@Entity包时,您的应用程序未扫描Member类上的default注释。当您尝试在Member课程上运行JPQL时,Hibernate会查找jpqlMember的映射,并且会因为未扫描该类而抛出QuerySyntaxException,并且它不会能够找到一个。

稍后当您将其移至存在Board类的同一个包时,它会成功扫描您的Member类,并且您的查询已执行且没有任何错误。

如果在配置packagesToScan="com.app.models" bean时设置sessionFactory属性,则需要确保该包中存在所有实体。