gpt4 book ai didi

java - Hibernate 继承注释说明

转载 作者:行者123 更新时间:2023-11-29 09:24:01 25 4
gpt4 key购买 nike

在我们的遗留代码中,我偶然发现了一个我无法完全理解的 hibernate 类实现。

有一个父类(super class)对应表WORK_REQUEST_GROUPS -

@Entity  
@Table(name="WORK_REQUEST_GROUPS")
@Inheritance(strategy=InheritanceType.JOINED)
public class CCSRequestGroup
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="REQUEST_GROUP_ID")
private Long groupId;
....
}

然后我们有一个子类对应表RELEASE_CANDIDATES -

@Entity
@Table(name="RELEASE_CANDIDATES")
@PrimaryKeyJoinColumn(name="RELEASE_CANDIDATE_ID")
public class CCSReleaseCandidate extends CCSRequestGroup {

@ManyToOne
@JoinColumn(name="GROUP_CONDITION_CODE")
private CCSRequestGroupCondition condition;
....
}

根据我的理解,CCSReleaseCandidates 是 CCSRequestGroup 的子类,并在列 RELEASE_CANDIDATES_ID 中加入。

现在我们有了一个方法,在这个方法中我们尝试根据一些标准找出 CCSRequestGroup 的实例 -

List<CCSRequestGroup> requests = session.createQuery("from CCSRequestGroup requestGroup where requestGroup.condition = \'AwaitingStartTime\' order by RAND()").list();

它可能试图找出当前 Hibernate session 中所有条件为“AwaitingStartTime”的 CCSRequestGroups。

这里让我费尽心思的是“条件”是 CCSReleaseCandidates 的成员而不是 CCSRequestGroup,那么我们如何才能成功获得 CCSRequestGroup 实例的条件成员。

有人可以帮帮我吗?

最佳答案

我想如果您打开 SQL 日志记录,您会发现您认为的简单语句实际上是在幕后与子类表进行外部联接。这就是为什么数据对 Hibernate 可用,并且 HQL 本身可能正在利用隐式多态性向您返回正确的结果。

关于java - Hibernate 继承注释说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4154902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com