具有一对多/多对一关系的POJO数据(JDBC)

时间:2014-08-08 16:30:52

标签: java sql jdbc pojo

例如,我有两个实体: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。

2 个答案:

答案 0 :(得分:1)

如果您更改Enterprise.departments集合中的内容,Hibernate将仅保存/更新外键。如果你没有反向关系,这是唯一的方法。

在您的代码中,您必须使用Enterprise对象更新Department表中的外键。

您可以通过设置字段&#39; enterprise&#39;来创建双向关联。在你的Department类中,但是你需要手动保持两个关系......

答案 1 :(得分:1)

要像hibernate一样执行此操作,您将拥有一个save(Enterprise)方法,该方法将企业对象持久保存到数据库,并插入/更新外键关联。

Hibernate支持可空和非可空外键。在后一种情况下,它将首先插入企业,获取其主键值,然后插入部门以及正确的外键值。

你也可以这样做。但是save(Department)方法只能在department表上进行更新,而不能更改与enterprise表的关联。为此,您必须在企业中更改集合并将其保存/更新到db。