0

好吧,我在休眠方面并不是那么先进,我尝试进行了很多搜索,发现了很多类似的问题,但没有一个真正适用于我的案例。我有一个表 TABLE1,它有一个索引“id”,另一个表作为索引(TABLE1_ID 和 NUMBER)。只有 TABLE1_ID 是外键,而 number 不引用任何特定内容

表 1 具有以下休眠映射

 <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 映射有问题(我对休眠没有那么先进)但是在尝试安装应用程序时,我收到以下错误

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

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

4

1 回答 1

0

身份副本(国外生成器)

最后,您可以要求 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;
}
于 2012-11-18T22:33:01.980 回答