2010-09-03 4 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 свойству "ContentID" Контента, но исключение Eclipse:

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

Если я заменить <key column="question" /> с <key column="contentID" />, он может работать, но отображение неправильных данных (на самом деле, насколько я вижу, он отображает QuestionID с ContentID Контента)

Кто знает, как сделать то, что я пытаясь достичь здесь?

Спасибо.

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

Я ж плохо дать пример, чтобы яснее, что я пытаюсь сделать:

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

Будет проверять это, но позже ... –

ответ

1

Похоже, этот подход не может работать и не поддерживается Hibernate (в таблице содержимого есть составной первичный ключ, в то время как я хочу сопоставить его только одному полю в таблице вопросов), поэтому я использую обходной путь, который я только сопоставляю вопрос с идентификатором contentID, и я использую ContentGetter класс, который получит контент, зависит от языкаID.

Смежные вопросы