JPA / отображение Hibernate для хранения месяцев и дней месяцев - PullRequest
0 голосов
/ 25 ноября 2008

У меня есть следующие POJO:

class Month {
    long id;
    String description;
    List<Day> days; // always contains 29, 30 or 31 elements
}

class Day {
    byte nr; // possible values are 1-31
    String info;
}

Есть ли способ сохранить эти объекты в следующую структуру БД, используя JPA + Hibernate:

Таблица МЕСЯЦЕВ:

id;description;

Таблица ДНЕЙ:

id-of-month;nr-of-day;info;

Есть ли лучшее решение для этой ситуации?

Ответы [ 3 ]

1 голос
/ 02 февраля 2009

Если вы не можете изменить структуру своего pojo или таблицы, вы немного облажались. Если вы можете, то подойдет простое аннотированное pojo.

class Month {
   @Id
   private long id;
   private String description;
   @OneToMany(mappedBy="month",fetchType=Lazy)
   private List<Day> days;

}

---- Требуется замена суррогатного ключа для таблицы Дней

class Day {
    @Id
    private int id;
    private Month month;
    private byte nr; // possible values are 1-31
    private String info;
}
0 голосов
/ 22 июня 2009

Можно ли сопоставить отношение UNIDIRECTIONAL класса Month @Entity с классом Day @Entity без @Embeddable с CascadeType.PERSIST, где идентификатор класса @Entity Day состоит из идентификатора месяца и индекса списка следующим образом?

@ Общественный класс Entity Month {

@Id
@GeneratedValue
private Integer id;


// one way relationship
@OneToMany(cascade=CascadeType.PERSIST)
@JoinColumn(name="MONTH_ID")
@IndexColumn(name="childIndex")
private List<Day> dayList = new ArrayList<Day>();

}

@ День публичного класса организации {

@EmbeddedId // composed by month foreign key and index column
private DayId id;

}

Я надеюсь, что вы решите эту проблему

С уважением Артур Рональд Ф. Д. Гарсия (программист на Java) Натал / Рн - Бразилия

0 голосов
/ 04 декабря 2008

Вот одно решение, которое я нашел:

class Month {
    long id;
    String description;

    @CollectionOfElements(fetch = FetchType.EAGER)
    @IndexColumn(name = "nr-of-day")
    List<Day> days; // always contains 29, 30 or 31 elements
}

@Embeddable
class Day {
    byte nr; // possible values are 1-31
    String info;
}

@ CollectionOfelements и @IndexColumn являются аннотациями Hibernate. Если я использую аннотацию @OneToMany, доступную в JPA, hibernate создает 3 таблицы вместо 2.

Моя единственная проблема сейчас заключается в том, что Day.nr сохраняется дважды: сначала как IndexColumn списка (счетчик на основе 0), а второй раз как поле класса Day (счетчик на основе 1).

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