gpt4 book ai didi

java - 两个类之间存在多个关联的 Hibernate 问题

转载 作者:行者123 更新时间:2023-12-01 10:23:53 24 4
gpt4 key购买 nike

我将 Hibernate 与 Playframework 1.2.4 结合使用。

我有两门课:考试和提问。问题始终具有涉及考试的属性。考试始终有一个引用名为specialQuestion 的问题的属性和一个引用问题集合的属性。

enter image description here

我的目标是创建一个包含影响每个人的特殊问题的考试。当我创建考试时,我创建了这个特殊问题。问题已正确创建并保存在数据库中,考试也已保存,但没有引用特殊问题,匹配列填充为空。

我不确定注释。有什么问题吗?

此静态方法返回默认的特殊问题

public static Question specialQuestion(Examination examination) {
Question question = new Question();
question.examination = examination;
/* Other attributes affectations */
return question;
}

这里创建了 Examination,影响specialQuestion 属性并保留对象:

Examination examination = new Examination();
examination.specialQuestion = Question.specialQuestion(examination);
examination.save();

类考试包含这些属性:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "examination", fetch = FetchType.LAZY)
public Set<Question> questions = new HashSet<Question>();

@OneToOne(cascade= CascadeType.ALL, mappedBy = "examination")
public Question specialQuestion;

类问题包含:

@ManyToOne
@OneToOne
public Examination examination;

编辑:

如果删除特殊Question @OneToOne注释中的mappedBy@OneToOne注释以在Question类中进行检查,我会收到错误:I无法再加载实体检查。

以下是 DDL 的重要部分:

CREATE TABLE `question` (
`questionId` bigint(20) NOT NULL AUTO_INCREMENT,
`examination_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`questionId`),
KEY `FKBE5CA006E00B1456` (`examination_id`)
) ENGINE=MyISAM AUTO_INCREMENT=204 DEFAULT CHARSET=latin1;

CREATE TABLE `examination` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`specialQuestion` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;

最佳答案

您不能将 @ManyToOne@OneToOne 添加到同一属性,因为 Hibernate 需要知道哪一个是 true。

既然拥有方是Question,Hibernate 应该如何知道哪个问题是特殊问题?从数据库的角度考虑:将关系存储在问题表中,您最终会得到引用同一考试的多个问题。如果这些是无序的(一组),您将如何根据可用数据确定特殊问题?既然你不能这样做,Hibernate 也不会这样做。

要解决这个问题,您需要使 Examination 成为 specialQuestion 的拥有方,并且可能也只是单向关系,即您不将其映射到 问题(删除mappedBy并添加一列以引用检查表)。

关于java - 两个类之间存在多个关联的 Hibernate 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35437280/

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