У меня есть две таблицы:
<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>
Я пытаюсь сопоставить свойство "question" 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" />
, он может работать, но отображать неверные данные (фактически, какнасколько я вижу, он сопоставляет вопрос с идентификатором контента)
Кто-нибудь знает, как сделать то, что я пытаюсь достичь здесь?
Спасибо.
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])
Эта ошибка означает, что у меня должен быть составной первичный ключ для таблицы секретных сообщений, котораяЯ не хочу: (
ОБНОВЛЕНИЕ
Я приведу пример, чтобы прояснить, что я пытаюсь сделать:
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 с идентификатором контента 4, 5, 6.