我有一个名为'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
答案 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