需要一些Hibernate关系映射的帮助

时间:2009-10-06 14:51:51

标签: java hibernate jsp persistence

这些是我想用Hibernate映射的表:

user (PK UserId)
article (PK ArticleId, FK CreatorUserId)
category (PK CategoryId, FK ParentCategoryId)

我一直在关注Hibernate的documentation,但我真的无法选择哪种类型的映射最适合我的表。

任何帮助将不胜感激! :)

2 个答案:

答案 0 :(得分:1)

  • 使用OneToMany映射到文章(一个用户创建许多文章);
  • 文章有一个ManyToOne映射到User;
  • 类别具有OneToMany映射到自身(子);
  • 类别具有自身(父级)的ManyToOne映射。

在这两种情况下,关系并非需要是双向的,但大部分时间都是双向的。

答案 1 :(得分:1)

对于用户 - 文章关系,您可以使用Set或List映射为bag;列表往往在java方面处理起来更方便,特别是如果文章具有您可能想要对该集合进行排序的属性(例如创建日期)。样本映射是:

<!-- within User mapping -->
<set name="articles" table="article" inverse="true">
  <key column="CreatorUserId"/>
  <one-to-many class="Article"/>
</set>

<!-- within Article mapping -->
<many-to-one name="creatorUser" class="User" column="CreatorUserId" not-null="true"/>

上面将关联映射为双向,而Article负责维护关系(这可以避免在收集更改期间进行不必要的更新)。详细信息为here。如果您更愿意使用List代替Set,请将<set>替换为<bag>;然后,您可以添加“order-by”属性,以使列表在数据库中排序。

对于类别,您理论上也可以这样做,但是如果您的类别层次结构很深,而您需要经常检索特定级别/子树,请考虑使用nested set model