例如,我有两个实体:Enterprise,Department。企业有很多部门,部门有一个企业,所以在Department表中有一个列--Enterprise_ID。 我有一个保存部门对象的功能
void save(Department department);
要在表中添加Enterprise_ID,我需要引用Enterprise对象或企业ID。
哪种方式更合适?
但是我更喜欢在部门对象中没有这样的信息,但是这样我怎样才能在表中保存Enterprise_ID?在我看来,Hibernate不知怎的做了。
public class Department{
private long id;
private String name;
private DepartmentType type;
private List<Employee> employees;
//getters()/setters()
}
public class Enterprise{
...
private List<Department> departments;
...
}
部门没有关于企业所在企业的任何信息。所以只使用部门对象我不能在部门表中插入Enterprise_ID(FK)。但是hibernate的save方法不知怎的做了。如果没有使用上面的实体进行休眠,我怎么能这样做呢?
我使用JDBC。
答案 0 :(得分:1)
如果您更改Enterprise.departments集合中的内容,Hibernate将仅保存/更新外键。如果你没有反向关系,这是唯一的方法。
在您的代码中,您必须使用Enterprise对象更新Department表中的外键。
您可以通过设置字段&#39; enterprise&#39;来创建双向关联。在你的Department类中,但是你需要手动保持两个关系......
答案 1 :(得分:1)
要像hibernate一样执行此操作,您将拥有一个save(Enterprise)
方法,该方法将企业对象持久保存到数据库,并插入/更新外键关联。
Hibernate支持可空和非可空外键。在后一种情况下,它将首先插入企业,获取其主键值,然后插入部门以及正确的外键值。
你也可以这样做。但是save(Department)
方法只能在department表上进行更新,而不能更改与enterprise表的关联。为此,您必须在企业中更改集合并将其保存/更新到db。