具有多种可能性的一对多映射

时间:2011-07-08 19:47:21

标签: java hibernate hibernate-mapping

我正在尝试保留我的数据,但是我无法想出一个能够以理智的方式为hibernate工作的架构

我有两个对象:频道和用户。用户与频道相关联,但在很多方面。它可以有5种特殊状态(可以分配多个)或者是正常状态。由于它有多对多的关系(用户可以在多个频道,而频道有多个用户),这个问题很复杂。

我的想法是拥有单独的频道和用户表,但有第三张大地图表。这个大的地图表看起来像这样

--------------------------------------------------------------------------
| CHANNEL_ID | USER_ID | STATUS1 | STATUS2 | STATUS3 | STATUS4 | STATUS5 |
--------------------------------------------------------------------------
|      5     |    10   |    0    |    1    |    0    |     0   |    0    |
--------------------------------------------------------------------------

请注意,如果新用户加入频道,则会获得新行。但是,如果它们获得新状态,则会更改其现有行。

真正令我困惑的是如何在Hibernate中实现类似的东西。我有这样的东西,但我一直玩这么久(现在2天)我甚至不知道它的作用了。

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "quackbot_user_map", joinColumns = {
    @JoinColumn(name = "USER_ID")}, inverseJoinColumns = {
    @JoinColumn(name = "STATUS1")}) 
protected Set<UserDAOHb> status1s;
  • 有更好的方法吗?
  • 我应该使用代表表格和查询的专用地图对象吗?

1 个答案:

答案 0 :(得分:1)

如果您想要映射该设计,则需要第三个实体,我将其称为Participation

  • 一个用户有很多参与;
  • 一个频道有很多参与;
  • 一个参与有一个频道,一个用户和5个布尔字段(status1到status5)

但更常规(当然也更容易查询)的设计方法是让参与实体只有一个状态,并为每个用户 - 频道 - 状态元组创建一个Participation实例。如果你考虑一下,如果可能的状态数量要大得多(或根本没有固定的话),它将是唯一可能的映射(据我所知)。