【发布时间】:2014-07-14 22:04:41
【问题描述】:
如何使用 NamedQuery 在可连接对象上查找实体?
我有一个带有 @Inheritance(strategy=InheritanceType.JOINED) 和两个子类/子实体的抽象父类/实体。
因此,在数据库中,我有一个父表 (sdrs) 和两个子表 (xSdrs 和 ySdrs)。
还有另一个表reservations,它与表sdrs 具有多对多关系。这就是为什么我在 reservations 和 sdrs 之间创建了一个可连接的对象。
我打算在父实体 Sdr 中有一个 NamedQuery 以便能够找到 XSdr 的记录/实体的键或YSdr 分别超过了可连接的。
在课堂上Sdr我有:
@NamedQuery(name="Sdr.findBySdrId", query="SELECT s FROM Sdr s "
+ "INNER JOIN s.reservations res WHERE res.sdrs = :transactionId")
和
@ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name="sdrs_has_reservations",
joinColumns = {
@JoinColumn(name="sdrs_id", referencedColumnName="sdrId", nullable=false)
}, inverseJoinColumns={
@JoinColumn(name="reservations_id", referencedColumnName="reservationId", nullable=false)
})
private List<Reservation<T>> reservations;
但是,当然,这会将 transactionId 设置为 reservationId,这必然会失败。
在反面我有:
@ManyToMany(mappedBy="reservations", fetch=FetchType.EAGER)
private List<Sdr<T>> sdrs;
那么,我如何必须在类/实体 Sdr 中实现命名查询才能获得正确的 Sdr(及其相关保留)并将 Sdr ID 设置为查询参数?
【问题讨论】:
标签: jpa multiple-inheritance jointable named-query