没有主键的表的Hibernate映射

时间:2010-08-17 07:28:40

标签: java oracle hibernate orm mapping

我知道之前已经问过这个问题,但我也有一个设计问题。

有两个表如下:

Table Group_table
column pk_Group_name
column group_type
etc

Table Group_members
column fk_group_name -> foreign key to group_table
column group_member

使用这种结构很容易,但我有两个问题。首先,我应该如何在Hibernate映射中映射group_members? Hibernate想要某种类型的id,我不知道该告诉它什么。

其次,虽然我可能先问一下,这个糟糕的数据库设计是不是? group_members表上是否应该有一个pk,比如序列或什么?

此外,这是一个Oracle数据库:尽管(可能)糟糕的数据库设计,我可以使用一些自动生成的ID吗?

2 个答案:

答案 0 :(得分:3)

  1. 始终添加PK。
  2. 切勿将商家密钥(如名称)用作外键。如果用户结婚会发生什么?或者一个组重命名?始终使用PK。
  3. Hibernate会为您处理此问题。只需添加ID列并将其映射为“native”(see the docs
  4. 即可

答案 1 :(得分:2)

您绝对需要映射中的标识符来描述行的唯一方式:PK,已分配或复合。在您的情况下,您可以使用composite-id

<class name="eg.Foo" table"FOOS">
    <composite-id name="compId" class="eg.FooCompositeID">
        <key-property name="string"/>
        <key-property name="short"/>
    </composite-id>
    <property name="name"/>
    ....
</class>

当然,这假设情侣(fk_group_name,group_member)是唯一的。但这并不理想,你应该有PK。

参考