Переопределить @CollectionTable - PullRequest
2 голосов
/ 02 февраля 2012

Мне нужно переопределить коллекционные таблицы в JPA?возможно, у кого-то есть идея

 public class nationality{
       @Embedded
       @AttributeOverrides({
              @AttributeOverride(name="language.language", column = @Column(name="code_lang")) })
       private Language language;
    .....

Языковой класс

@Embeddable
public class Language{
  @ElementCollection(fetch = FetchType.Eager)
  @CollectionTable(name="nat", joinColumns = @JoinColumn(name = "id"))
  private Collection<LanguageObj> language;
...
}

Это работает, но ссылка @CollectionTable должна происходить в классе национальности.Как это можно сделать?

Класс Language должен быть повторно использован другими классами, которые получают данные из другой таблицы.Проблема в том, что таблицы уже существуют с данными, поэтому таблицу нельзя редактировать так же, как страну класса, которая получает свои данные из таблицы страны

public class country{
       @Embedded
       @AttributeOverrides({
              @AttributeOverride(name="language.language", column = @Column(name="code_country")) })
       private Language language;
    .....
}

Ответы [ 2 ]

1 голос
/ 08 октября 2012

Вот решение
Общая идея:
1. В поле для сбора аннотируемого объекта введите @ElementCollection
2. В сущностях аннотируйте коллекционный геттер с помощью @CollectionTable. Получатель должен пересылать получателю встраиваемого. Для каждой сущности вы можете указать отдельное имя таблицы внутри @CollectionTable аннотация

enum DayOfWeek {
    MONDAY,TUESDAY,...
}

@Embeddable
class ScheduleProperties {
    ...
    @ElementCollection
    private List<DayOfWeek> daysOfWeek;
    ...
    public List<DayOfWeek> getDaysOfWeek() {
        return daysOfWeek;
    }
}

@Entity
class SomeEntity {
    ...
    @Embedded
    private ScheduleProperties embd = new ScheduleProperties();
    ...
    @CollectionTable(name="some_entity_days_of_week")
    public List<DayOfWeek> getDaysOfWeek() {
        return embd.getDaysOfWeek();
    }
}

@Entity
class AnotherEntity {
    ...
    @Embedded
    private ScheduleProperties embd = new ScheduleProperties();
    ...
    @CollectionTable(name="another_entity_days_of_week")
    public List<DayOfWeek> getDaysOfWeek() {
        return embd.getDaysOfWeek();
    }
}
0 голосов
/ 15 октября 2015

Используйте @AssociationOverride(s), как если бы вы использовали @AttributeOverride(s)

@AssociationOverride(name = "language",
                     joinTable = @JoinTable(name = "nat",
                                            joinColumns = @JoinColumn(name = "id")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...