我有 2 个实体:EntityA 和 EntityB。它们与一对多关系相关。
public class EntityA {
@Identifier
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="ID", updatable = false, nullable = false)
private long id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="ENTITY_A_ID", referencedColumnName="ID", nullable=true)
private List<EntityB> entityBs;
/* GETTERS SETTERS ... */
}
public class EntityB {
@Identifier
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="ID", updatable = false, nullable = false)
private long id;
@Column(name="SOME_PROPERTY")
private String someProperty;
@ManyToOne
@JoinColumn(name="ENTITY_A_ID")
private EntityA entityA;
/* GETTERS SETTERS ... */
}
我有一个查询,将 EntityA 与 LEFT JOIN 连接到实体 B。还有一个“ON”子句。在正常的 SQL 术语中,这将是:
select * from EntityA eA left join EntityB eB
on (eA.ID = eB.ENTITY_A_ID and eB.SOME_PROPERTY = "blabla" )
where ...
因此,我从加入的结果集中获得了急需的信息。我只希望记录与某些属性匹配时加入。如果 EntityB 与连接子句匹配,我需要 EntityA、allways 和附加的 EntityB。
该项目使用 Hibernate / JPA 设置。我不知道如何检索所需的信息。此刻我有:
public class EntityADAO {
public List<EntityA> findMethod() {
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<EntityA> query = builder.createQuery(EntityA.class);
Root<EntityA> entityARoot = query.from(EntityA.class);
Join<EntityA, EntityB> entityBJoin = entityARoot.join("entityB", JoinType.INNER);
entityBJoin.on(new Predicate [] {builder.equal(entityBJoin.get("someProperty"), "fixed_val_for_now"});
/* where clause left out for readability */
TypedQuery<EntityA> q = entityManager.createQuery(query);
return q.getResultList();
}
}
所以我在这里.. 卡在我的 EntityAs 列表中。每当我在 EntityA 上调用 getEntityBs() 时,我都会得到所有这些.. 这是有道理的.. 但是我怎样才能检索加入的集合?
我坚持使用 JPA 和 Hibernate,因为这个选择不是我做出的。
提前致谢!