【问题标题】:Finding an inherited entity over a jointable with NamedQuery使用 NamedQuery 在可连接对象上查找继承实体
【发布时间】:2014-07-14 22:04:41
【问题描述】:

如何使用 NamedQuery 在可连接对象上查找实体? 我有一个带有 @Inheritance(strategy=InheritanceType.JOINED) 和两个子类/子实体的抽象父类/实体。 因此,在数据库中,我有一个父表 (sdrs) 和两个子表 (xSdrsySdrs)。 还有另一个表reservations,它与表sdrs 具有多对多关系。这就是为什么我在 reservationssdrs 之间创建了一个可连接的对象。
我打算在父实体 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


    【解决方案1】:

    SELECT sdr FROM Reservation r JOIN r.sdrs sdr WHERE sdr.id=:id

    【讨论】:

    • 有时它可以如此简单!谢谢你。 :-D
    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2016-05-29
    • 2013-12-19
    相关资源
    最近更新 更多