2012-11-18 54 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; 
}