Java 没有主键的表的Hibernate映射

Java 没有主键的表的Hibernate映射,java,oracle,hibernate,orm,mapping,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映射中映射组成员?Hibernate需要某种

我知道以前有人问过这个问题,但我也有一个设计问题

有两张这样的表格:

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映射中映射组成员?Hibernate需要某种id,我不知道该怎么说

第二,也许我应该先问一下,这是不是一个糟糕的db设计?group_members表上是否应该有pk,如序列或其他内容

此外,这是一个Oracle数据库:尽管数据库设计(可能)很差,但是否有一些自动生成的id可以使用

  • 总是添加一个PK
  • 切勿将业务密钥(如名称)用作外键。如果用户结婚了会发生什么?或者一个组重新命名自己?始终使用PK
  • Hibernate会为您处理这个问题。只需添加一个ID列并将其映射为“native”()

  • 在描述行的唯一性的映射中,您绝对需要一个标识符:按主键、分配或组合。在您的情况下,您可以使用
    复合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_组名称、组成员)是唯一的。但这并不理想,你应该有一个PK

    参考文献

    1。不是我的桌子,但我会尽力听从你的建议。2.约束应该级联更改,不是吗?3.我的意思是“我可以使用一个隐藏的pk吗?”我想你回答了这个问题,“当我有一个pk序列时,Hibernate会自动找出它是什么类型的吗?”我是否读得足够好,还是我误解了你的意图?1。如果可以的话,让那个设计DB的人被解雇。他很危险2.如果您启用该功能,则它们可以(请参阅映射文档)。3.我看不到所有的专栏,但我想如果你能找到的话,你会发布任何PK专栏,所以我想没有。类型为编号(20)或类似类型。除非你有超过1亿行,否则不要犹豫使用大数字。这是你发布时我所做的,所以我会给你答案。理想是理想,但有时你无论如何都必须完成工作。@Nathan这就是我回答的精神:它可能会工作,但并不理想:)如果你能解决问题(无PK),那就好了。