Hibernate中的ManyToOne关系,而不是数据库中的

时间:2012-12-03 18:15:43

标签: java hibernate orm

我有一个名为'Department'的实体和另一个名为'student'的实体。我知道部门会有很多学生,数据库中这两个表之间应该有关系。但是在我的项目中,数据库表已经存在,并且部门和学生表之间没有关系(外键)。

在实体类student.java中,有一个关系写为,

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = 'DeptId', nullable = false, insertable = false, updatable = false)
Department department

我对这个现有代码感到困惑。

当我编写测试时,我通过deptId从DB获取部门并将学生实体设置为,

student.setDepartment(department);

这不会填充学生表中的DB列'DEPTID'。

由于部门没有学生收藏,我不能将学生设为,

department.addStudents(student);

我不确定我们是否可以在没有DB中的表之间的关系的情况下坚持@ManyToOne关系。

请告诉我如何解决此问题,以便学生表中的'DEPTID'列填充正确的数据。

提前致谢, BS

2 个答案:

答案 0 :(得分:1)

你有

@JoinColumn(name = 'DeptId', nullable = false, insertable = false, updatable = false) 相反,为什么不尝试

@JoinColumn(name = 'DeptId', nullable = false)

Hibernate不会检查您放置的映射约束是否在db级别有效。它只是假设它是有效的并且基于该假设执行查询。

答案 1 :(得分:0)

很抱歉很晚才回复你的问题,但我认为答复同样可以帮助另一个人。现在你说这些表已经存在于数据库中,如果他们haven't yet got some data然后我建议你drop他们,请将Table Generation Strategy文件中的persistence.xml激活到Create在这种情况下,它将使用您所需的关系列重新创建这些表。不要忘记使用@OneToMany课程上的Department.java注释来表明其接收许多学生的能力。它与@ManyToOne

一起使用