2010-09-03 211 views
3

我有兩個表:Hibernate的一對多映射

<class name="Content" table="language_content" lazy="false"> 
    <composite-id> 
     <key-property name="contentID" column="contentID"/> 
     <key-property name="languageID" column="languageID"/>   
    </composite-id> 
    <property name="Content" column="Content" /> 
</class> 

<class name="SecretQuestion" table="secretquestions" lazy="true"> 
    <id name="questionID" type="integer" column="QuestionID"> 
     <generator class="increment"></generator> 
    </id> 
    <property name="question" column="Question"/> 
    <property name="isUsing" column="IsUsing"/> 
    <bag name="contents" inverse="true" cascade="all,delete-orphan"> 
     <key column="question" /> 
     <one-to-many class="Content" /> 
    </bag> 
</class> 

我試圖SecretQuestion的「問題」 屬性映射到「內容識別」 屬性內容但Eclipse拋出異常:

org.hibernate.exception.SQLGrammarException: could not initialize a collection: [com.sms.model.entity.SecretQuestion.contents#1] 

如果我更換​​與<key column="contentID" />,它可以運行,但映射了錯誤的數據(實際上,據我看到的,它的questionID映射與內容的內容識別)

任何人都知道該怎麼做,我什麼試圖在這裏實現?

謝謝。

UPDATE

奧基,修改帕斯卡後表示,這裏是新的錯誤:

javax.servlet.ServletException: org.hibernate.MappingException: Foreign key (FKB65C9692FCD05581:language_content [contentID,languageID])) must have same number of columns as the referenced primary key (secretquestions [QuestionID]) 

此錯誤意味着我必須有用於secretquestions表,我不復合主鍵不想:(

UPDATE

I W生病舉一個例子來更清楚什麼,我試圖做的:

Table SecretQuestion 
questionID* question answer 
1   4  a 
2   5  a 
3   6  a 

Table Content 
contentID* languageID* content 
1   1   a 
1   2   b 
2   1   c 
2   2   d 
3   1   e 
3   2   f 
4   1   g 
4   2   h 
5   1   i 
5   2   j 
6   1   k 
6   2   l 

現在我想問題4,5,6映射到內容ID 4,5,6

+0

將測試此,但稍後... – 2010-09-03 07:30:19

回答

1

貌似這個方法不能工作和Hibernate不支持(內容表具有複合主鍵,而我想只將其映射到問題表中的一個字段),因此我使用了一種解決方法,我只將問題映射到contentID,並使用ContentGetter將獲得內容的類取決於語言ID。