我有一个懒散的1:n关系
Bp
到
BpHistorisiert
我没能告诉JPA急切地把这件事付诸实践。
我有一个条件查询,它执行一个fetch连接来加载
历史学者
一起
血压
.
不幸的是它不起作用,不
历史学者
实例已加载。这个
bpHistorisiertList
进入
血压
雷曼是空的。
这是由criteria api生成的jpql查询:
SELECT * FROM Bp b LEFT JOIN FETCH b.bpHistorisiertList
jpa正在生成这个sql查询:
SELECT t0.id,
t6.bp_id,
t6.id,
FROM infop_stammdaten.bp t0
LEFT OUTER JOIN infop_stammdaten.bp_historisiert t6
ON t0.id = t6.bp_id
ORDER BY t6.bp_id ASC;
如果我在数据库中执行这个查询,我会得到正确的数据。
血压
@Entity
@Table(name = "BP", schema = "INFOP_STAMMDATEN")
public class Bp extends BaseEntity implements EntityId, Serializable {
/** technische ID */
@Id
@Column(name = ID)
private Long id;
@Valid
@OneToMany(mappedBy = "bp", orphanRemoval = false, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<BpHistorisiert> bpHistorisiertList = new ArrayList<>();
}
历史学者
@Entity
@Table(name = "BP_HISTORISIERT", schema = "INFOP_STAMMDATEN")
public class BpHistorisiert implements EntityId, GueltigkeitOwner, AbkuerzungOwner, Serializable {
@Id
@Column(name = ID)
private Long id;
@NotNull
@ManyToOne
@JoinColumn(name = BP_ID)
@ForeignKey
private Bp bp;
}
查询
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Bp> bpQuery = builder.createQuery(Bp.class);
Root<Bp> fromBp = bpQuery.from(Bp.class);
fromBp.fetch(Bp_.bpHistorisiertList, JoinType.LEFT);
List<Bp> bpList = entityManager.createQuery(bpQuery).getResultList();