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



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

在实体类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

您有

@JoinColumn(name = 'DeptId', nullable = false, insertable = false, updatable = false)你为什么不试试呢

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

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

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

最新更新