Проблемы с ElementCollection / MappedSuperclass / AssociationOverride - PullRequest
2 голосов
/ 23 февраля 2011

У меня проблемы с преодолением ассоциации. Чтение Javadoc http://download.oracle.com/javaee/6/api/javax/persistence/CollectionTable.html вы можете прочитать "Смотрите также: ElementCollection, AttributeOverride, AssociationOverride, Column ", который дает нам предположение, что вы можете использовать его ... но я не знаю, как это не работает

@MappedSuperclass
public class AbstractUser {
 [...]
public String getLastname() { ...}
    @ElementCollection
    @CollectionTable(joinColumns=@JoinColumn(name="user_id"))
    @Column(name="nickname")
    public Set<String> getNicknames() { ... } 

реализует

@Entity
@Table(name="users")
@Table(name="user_rfcs")
@AssociationOverride(name = "nicknames",
        joinTable = @JoinTable(name = "user_nicknames", joinColumns = @JoinColumn(name = "user_id"))
)
public class User extends AbstractUser {
[...]
}



@Entity
@Table(name="user_rfcs")
@AssociationOverride(name = "nicknames",
        joinTable = @JoinTable(name = "user_rfc_nicknames", joinColumns = @JoinColumn(name = "user_id"))
)
public class UserRFC extends AbstractUser  {
       [...]
}

1 Ответ

1 голос
/ 23 февраля 2011

@AssociationOverride упоминается в разделе «См. Также» по следующим причинам:

Если встраиваемый класс содержит ссылки на другие объекты, значения по умолчанию для столбцов, соответствующих этим ссылкам, могут быть переопределены с помощью аннотаций AssociationOverride и / или AssociationOverrides.

С другой стороны, javadoc @AssociationOverride говорит, что он может применяться только к отношениям сущностей, а не к коллекциям примитивов:

Используется для переопределения сопоставления для отношения сущности

Итак, похоже, что вы не можете сделать это с @AssociationOverride, и вам нужно переопределить метод getNicknames() различными аннотациями в подклассах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...