【问题标题】:POJO data with one to many / many to one relationship(JDBC)具有一对多/多对一关系的 POJO 数据(JDBC)
【发布时间】:2014-08-08 16:30:51
【问题描述】:

例如,我有两个实体:企业、部门。企业有很多部门,部门有一个企业,所以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)。但是休眠的保存方法以某种方式做到了。如果不使用上面的实体休眠,我怎么能做到这一点;

我使用 JDBC。

【问题讨论】:

  • 如果部门总是企业的一部分,那么部门类没有嵌套在企业中是有原因的吗?然后您可以访问其 ID(如果您将保存方法设为 Department 的成员)。
  • 这真的取决于。关系会改变吗?如果没有,那么您只需要 EnterpriseId 进行插入,而不需要更新。
  • 我编辑了一些东西。

标签: java sql jdbc pojo


【解决方案1】:

要以与休眠相同的方式执行此操作,您将拥有一个save(Enterprise) 方法,它将企业对象保存到数据库并插入/更新外键关联。

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

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

【讨论】:

    【解决方案2】:

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

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

    您可以通过在您的部门类中放置一个字段“企业”来创建双向关联,但是您需要手动保持两个关系同步...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 2019-08-31
      • 1970-01-01
      相关资源
      最近更新 更多