我在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])
感谢任何人的帮助,谢谢:)
答案 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;
}