2012-11-18 46 views
0

好吧,我不是那种先进的休眠,我试图搜索很多,发现很多类似的问题,但没有真正应用我的情况。我有一个表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映射(我不休眠如此先进的),但要安装应用程序时,我收到以下错误

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

我明白任何人的帮助,感谢: )

+0

你使用的是什么版本的hibernate? –

+0

休眠版本是3.3.1,谢谢:) – wassim

+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; 
}