【发布时间】:2014-02-21 20:53:35
【问题描述】:
在 Hibernate/JPA 中定义一对多关系的标准方法是在子对象中引用其父对象。
@Entity
@Table(name="PARENT")
public class Parent {
// ...
@OneToMany(mappedBy="department")
private Set<Child> children;
// ...
}
@Entity
@Table(name="CHILD")
public class Child {
// ...
@ManyToOne
@JoinColumn(name="parent_id")
private Parent parent;
// ...
}
这种方法的问题是 Child 变成了重量级的类,更难通过网络发送等等。
是否可以在没有从 Child 引用的 Parent 对象并且没有额外的引用/连接表的情况下定义一对多关系?在这种情况下,子类定义如下:
@Entity
@Table(name="CHILD")
public class Child {
// ...
@Column(name="DEPARTMENT_ID")
private Long departmentId;
// ...
}
【问题讨论】:
-
当然,但是如果您实际上不想使用 ORM,为什么还要承担 ORM 的所有开销?
-
Parent 和 Child 都是复杂对象,我希望 ORM 的强大功能可以帮助我读写它们,但是一旦读取了 Parent,我希望能够将其子对象用作无需携带 Parent 的独立实体。
-
不,你不能这样做 ORM 用于组成两个对象之间的引用完整性,所以你让它不那么重要。
-
nikpon,请删除您的编辑。这些名称是故意大写的,因为它们是类名。至于你的回答,不清楚你想说什么。如何保持完整性取决于开发人员。
-
您不应该根据必须通过网络发送的内容来设计实体。您应该根据数据模型来设计它们。然后在您想通过网络发送实体时对其进行注释、调整或转换。例如,如果使用 Jackson 将其转换为 JSON,您可以添加 getParentId() getter,并使用 @JsonIgnore 注释父字段,并且父 ID 将通过网络而不是整个父对象发送。
标签: java hibernate jpa one-to-many