在hibernate中为表创建唯一的索引,其中一列是外键

时间:2012-11-18 16:51:36

标签: java hibernate

我在hibernate中并不是那么先进,我试图搜索很多,发现很多类似的问题,但没有一个真正适用我的情况。我有一个表TABLE1,它有一个索引“id”和另一个表有索引(TABLE1_ID和NUMBER)。只有TABLE1_ID是外键,而数字不引用任何特定的

表1具有以下hibernate映射

 <class name="com.test.basic.BASICTABLE1"
    entity-name="com.test.TABLE1" table="TABLE1"
    dynamic-update="true" optimistic-lock="version">
    <id name="id" type="long">
        <column name="id" />
        <generator class="native">
            <param name="sequence">${table1_id.generator.sequence}</param>
        </generator>
    </id>
    <version name="versionNumber" column="verno" generated="always"
        access="field" />
    <property name="column1" column="column1" type="string" length="19"
        not-null="true" access="field" />
 </class>

我不确定另一个表的映射应该是什么。我按照以下方式做到了

  <class name="com.test.basic.BASICTABLE2"
    entity-name="com.test.TABLE2" table="table2"
    dynamic-update="true" optimistic-lock="version">

    <composite-id name="id" class="com.test.basic.TABLE1TABLE2Id" >
      <key-property name="TABLE1_ID" column="TABLE1_ID" type="long" />
      <key-property name="NUMBER" column="NUMBER" type="short"/>
    </composite-id>
 </class>

请注意我在读到某处应该有一些中间映射后创建了TABLE1TABLE2Id类。

我确定TABLE2映射有问题(我对hibernate不太高级)但是在尝试安装应用程序时,我收到以下错误

 Foreign key (TABLE1 [id]) must have same number of columns as the referenced primary key (TABLE2 [TABLE1_ID, NUMBER])

感谢任何人的帮助,谢谢:)

1 个答案:

答案 0 :(得分:0)

Identity copy (foreign generator)

  

最后,您可以要求Hibernate从另一个复制标识符   相关实体。在Hibernate术语中,它被称为外国人   生成器,但JPA映射读得更好,并鼓励。

来自一个实体的主键可能作为外键是另一个表的主键。

@Entity
class MedicalHistory implements Serializable {
  @Id Integer id;

  @MapsId @OneToOne
  @JoinColumn(name = "patient_id")
  Person patient;
}

@Entity
class Person {
  @Id @GeneratedValue Integer id;
}