JPQL根据孙属性选择实体

时间:2016-10-12 13:15:06

标签: java jpql

我正在尝试选择一个A实体B,其中C包含C.d列表,其中值@Entity class A { @GeneratedValue @Id private Long id; @Column(name="B") @OneToOne(cascade=CascadeType.ALL) @MapsId private B b1; } @Entity class B { @GeneratedValue @Id private Long id; @OneToMany(mappedBy="b2", cascade=CascadeType.ALL) private List<C> cs; } @Entity class C { @GeneratedValue @Id private Long id; @ManyToOne @JoinColumn(name="B") private B b2; private String d; } 必须与参数匹配。

我的实体看起来像这样:

SELECT entity FROM A entity WHERE entity.b1.cs.d = :d

我选择我的实体的天真方法如下:

GroupType groupType = groupTypeDao.findById(3); GroupType groupType1 = groupTypeDao.findById(3); System.out.println(groupType); System.out.println(groupType1);

如何构建查询?

2 个答案:

答案 0 :(得分:1)

应该是:

SELECT entity FROM A entity INNER JOIN entity.b1.cs CSList WHERE CSList.d = :d

阅读JPA中的INNER JOIN。

http://www.thejavageek.com/2014/03/24/jpa-inner-joins/

答案 1 :(得分:0)

试试这个

    TypedQuery<A> query = em.createQuery("select b.a from B b inner join C c where c.d = :d",A.class);
List<A> a = query.getResultList();