gpt4 book ai didi

Hibernate:与同一类的多个关联

转载 作者:行者123 更新时间:2023-12-02 10:36:09 24 4
gpt4 key购买 nike

我需要将一个实体与两个其他实体列表相关联 - 这两个列表都包含相同类型的实体。它看起来像这样:

@Entity
public class Course {
private List<Test> preTests;
@OneToMany(cascade= javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = “course”)
@OrderBy("testNumber")
public List< Test > getPreTests() {
return preTests;
}

public void setPreTests(List< Test > preTests) {
this. preTests = preTests;
}

private List<Test> postTests;
@OneToMany(cascade= javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = “course”)
@OrderBy("testNumber")
public List< Test > getPostTests() {
return postTests;
}

public void setPostTests(List< Test > postTests) {
this. postTests = postTests;
}
}

现在,我什至没有费心去尝试这个本身,因为很明显 Hibernate 无法区分哪个 Tests进入preTests其中进入 postTests 。如果我错了,请纠正我,但它唯一需要使用的信息是 Test 中的外键。表指向 Course记录,并且前后测试都将指向相同的 Course 。我的下一个想法是创建显式 PreTestPostTest Test 的子类,并拥有一个List<PreTest>和一个List<PostTest> ,但这导致了臭名昭著的“mappedBy引用未知目标实体属性:类(class)”问题,Hibernate的人们声称这个问题——出于让我觉得挑剔的原因——是设计使然,因此不太可能消失。

我目前的想法是使用单独的联接表来保存两个关联。我认为这没有任何理由行不通。它还满足我的愿望,即将所有显式 SQL(甚至 HQL)排除在实体定义之外,并抵制强制创建奇怪的组合键或以其他方式编写仅反射(reflect)我的持久性框架的怪癖而不是我的对象设计的代码。

不过,在我开始学习这门类(class)之前,我想问一下你们是否有更清晰的解决方案,或者是否知道我的推理中的缺陷。

提前致谢。

迈克尔

最佳答案

我不知道这是否是一个好主意,但您可以添加

@org.hibernate.annotations.Where

在关联映射上添加注释,并在测试表上使用鉴别器列,以便在加载测试实例时可以区分前测试和后测试。

关于Hibernate:与同一类的多个关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304271/

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