2012-03-07 4 views
3

Я знаю, @SecondaryTable вопросов были опубликованы много раз, поэтому, если есть один и тот же (я еще не нашел его), пожалуйста, дайте мне ссылку или совет.Hibernate: @SecondaryTable не работает

У меня есть две таблицы в моей базе данных (firstTable и secondTable), два POJO Hibernate классы (FirstTablePojo и SecondTablePojo).

+----------+    +-----------+ 
|firstTable|    |secondTable| 
|----------+    |-----------+ 
|featureId |------------>|featureId |(secondTable's primary key) 
|foo  |    |featureName| 
|bar  |    +-----------+ 
+----------+ 

Я хочу, чтобы показать поля из обеих этих таблиц в СПЯ от одного объекта списка, я решил использовать @SecondaryTable. Эти две таблицы связаны полем featureId (который является первичным ключом для secondTable), я хочу, чтобы featureName отображался вместе с полями firstTable. FirstTablePojo предшествует этой аннотации:

@SecondaryTable(name="secondTable", 
    [email protected](name="featureId", 
             referencedColumnName = "featureId")) 

Я добавил эту недвижимость в FirstTablePojo (с добытчиками и сеттеров):

@ManyToOne 
@JoinColumn(name="featureId", table="secondTable") 
String featureName; 

Когда с помощью <c:forEach items="${features}" var="feature">, я получаю каждый ${feature.foo} (foo является свойство, которое было в FirstTablePojo, прежде чем я использовал @SecondaryTable) и ${feature.featureName}, я вижу каждый foo, но ни один из featureNames не отображается. Было бы здорово, если бы кто-нибудь мог сказать мне, что мне здесь не хватает, и почему имена функций из другой таблицы не отображаются в списке объектов FirstTablePojo.

+0

Как вы решили свою проблему? Я в той же ситуации ... – davioooh

+0

'featureId' был основным ключом в вашей основной таблице? или внешний ключ для «secondTable»? – davioooh

+0

@ davioooh О, в то же время я разместил этот вопрос http://stackoverflow.com/questions/9627102/selecting-from-two-tables-in-hibernate, чтобы они, вероятно, были в одних и тех же таблицах. –

ответ

7

Пункт анкеты @SecondaryTable состоит в том, чтобы отображать поля одного объекта в несколько таблиц, точно так же, как если бы эти таблицы были объединены в один.

@ManyToOne используется для сопоставления ассоциации «один-два» между двумя объектами. Но у вас его есть. В этом контексте нет смысла. И @JoinColumn используется для указания того, что поле сопоставляется столбцу, который представляет собой столбец ... join, то есть внешний ключ для другой таблицы. Так что это тоже не имеет смысла.

Просто используйте следующее отображение:

@Column(name="featureName", table="secondTable") 
String featureName; 

Это хорошо объясняется, с примером, в Hibernate documentation.

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