Список гибернации пользовательского составного типа - PullRequest
2 голосов
/ 15 марта 2011

Joda Time не имеет понятия интервала между LocalTimes, поэтому я сделал один:

public final class LocalInterval
{
  private LocalTime start;
  private LocalTime end;
  ..

Конечно, я также сделал поддержку Hibernate, сохранив местное время в виде двух свойств, "start" и "end":

public class PersistentLocalIntervalAsTime implements CompositeUserType, Serializable
{
  public String[] getPropertyNames() {return new String[]{"start", "end"};}
  ...

В моем классе package-info.java я отобразил «LocalInterval»:

@TypeDef(
  name = "LocalInterval",
  typeClass = PersistentLocalIntervalAsTime.class
),

Так что теперь я просто хочу иметь список LocalInterval внутри MyClass:

@CollectionOfElements(targetElement=LocalInterval.class)
List<LocalInterval> intervals;

Hibernate не любит это и говорит, что не может определить тип. Итак, я попробовал:

@CollectionOfElements(targetElement=LocalInterval.class)
@Type(type="LocalInterval")
List<LocalInterval> intervals;

Это, по крайней мере, сгенерировало схему, но схема имеет:

create table myclass_intervals (
  element time,
  myclass varchar(40) not null
) ENGINE=InnoDb;

Это выглядит неправильно - разве у меня не должно быть двух столбцов TIME, "start" и "end", вместо одного столбца "TIME" "element"?

1 Ответ

0 голосов
/ 17 марта 2011

Очевидно, вы должны явно указать Hibernate, что следует использовать несколько столбцов:

@CollectionOfElements(targetElement=LocalInterval.class)
@Type(type="LocalInterval")
@Columns(columns={@Column(name="start"), @Column(name="end")})
List<LocalInterval> intervals;

Я не знаю, почему Hibernate не выясняет это автоматически, запрашивая PersistentLocalIntervalAsTime - или, по крайней мере, выдает ошибку вместо создания отдельного столбца по умолчанию.

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