【发布时间】:2016-02-27 21:52:57
【问题描述】:
我使用 Hibernate 4.2.21 开始我的第一个项目,首先使用 JPA 2.0,我想创建一个关系 OneToMany 单向。我在 Hibernate 3 的版本中看到了很多示例,但在 4.2.21 中却没有看到这个示例完美运行,但我不知道是否是一个好的做法,我想知道其他成员对此的意见吗?
一对多关系:
-父模板:
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "template_id")
private Set<Variable> variables = new LinkedHashSet<Variable>();
-子:变量
@Column(name = "template_id", nullable = false)
Integer templateId;
【问题讨论】:
-
子级通常不应该有其父级的 ID。如果子节点需要知道其父节点,则改为使其成为双向关联。
-
在我的情况下,孩子没有必要必须认识父亲,然后为了实施一个好的做法,只需要删除孩子中的引用?
-
是的。 templateId 字段是不必要的。另请注意,尽管您使用
new LinkedHashSet()初始化集合,但 Hibernate 不会使用该集合实现,也不会在任何地方保留插入顺序。所以不要期望集合中的变量在 Hibernate 加载的实体中以任何特定的顺序排列。 -
好的,谢谢!还有关于 Collections 的问题.. 这是另一点,一些示例在另一个 List 中使用 Set,最佳做法是什么?
-
当您需要保留顺序(使用索引列)时,列表是必需的。在其他情况下,Set 是一个更好的选择(除非你有一个表现不佳的 equals()/hasshCode() 实现:避免出现问题的最简单方法是避免覆盖这两个方法)。
标签: java oracle hibernate jpa jpa-2.0