Hibernate:与同一类的多个关联

标签 hibernate associations

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

@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/

相关文章:

java - hibernate -JPA : foreign key not set in ManyToOne relationship

java - Hibernate 无法加载空间数据

java - 有人可以解释一下这个 hibernate 方法的作用吗?

ruby-on-rails - 获取 Rails 模型中关联列的总和

node.js - Sequelize : Error creating a post and associating it with the current user

javascript - Sequelize onDelete 不工作

java - @IdClass 与非原始@Id

java - 如何配置 Hibernate Envers 以避免实体修订查询中的某些集合(连接表)

mysql - 按关联模型中的列对 Rails 数据库表进行排序

ruby-on-rails - 了解 Rails 指南关联示例