我有三个类:A.java,B.java和C.java。 A和B扩展C.如何编写JPA查询以正常工作?我试过了
Query query = em.createQuery("select c from C c left join A a left join B b where (c.id = a.id or c.id = b.id)");
答案 0 :(得分:1)
简短的回答是你没有。在JPA:
如果未在实体层次结构的根类上指定@Inheritance注释,则使用默认策略InheritanceType.SINGLE_TABLE
当您从表C中选择所有内容时,JPA提供程序将基于discriminator column
实例化类,所以
List<C> rl = em.createQuery("select c from C c", C.class).getResultList();
System.out.println(rl);
会给你:
Hibernate: select c0_.id as id2_0_, c0_.DTYPE as DTYPE1_0_ from C c0
[model.C@2cac4385, model.A@6731787b, model.B@16f7b4af]
如果需要,可以使用Java中的instanceof
运算符来确定结果类型。如果你想要一个特定的子类,那么只需查询它:
List<A> rl = em.createQuery("select a from A a", A.class).getResultList();
System.out.println(rl);
会给你:
Hibernate: select a0_.id as id2_0_ from C a0_ where a0_.DTYPE='A'
[model.A@3fc9dfc5]