Hibernate создать объект в отношении через фабрику - PullRequest
2 голосов
/ 14 июля 2011

Я новичок в Hibernate и пытаюсь добиться следующего: класс, с которым я работаю, является постоянным и хранится в БД. Это выглядит так:

class Card {
  private int id;
  private CardPrototype prototype;  // fixed this line
  ...
};

и содержит все необходимые методы получения и установки и аннотации для сохранения. Карта класса хранится в таблице БД следующим образом

CREATE TABLE Card (
  id SERIAL NOT NULL,
  prototype CHAR(85) NOT NULL,
  ...
)

Класс по отношению к CardPrototype, он идентифицируется строковым идентификатором и вообще не сохраняется в базе данных. Однако у меня есть фабричный класс с нестатическим методом

CardPrototype getPrototype (final String id)

, который я хочу использовать для разрешения поля Card.prototype во время загрузки объекта ORM. Не могли бы вы помочь мне достичь этого с помощью Hibernate?

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Вы можете использовать аннотацию @Type и выполнять загрузку и сохранение самостоятельно. См. Как хранить дату / время и временные метки в часовом поясе UTC с JPA и Hibernate , особенно ответ с UtcTimestampType для примера.

0 голосов
/ 14 июля 2011

Простым решением было бы иметь поле String prototypeId в классе вашей Карты. Затем используйте @PostLoad, чтобы получить объект с фабрики, когда у вас есть идентификатор строки

@PostLoad
public void loadCardProtoType() {
   CardPrototypeFactory factoryInstance = new CardPrototypeFactory();
   setCardPrototype(factoryInstance.getPrototype(this.prototypeId));
}

Теперь, когда вы используете класс Card, у вас будет экземпляр CardPrototype. Также вы можете сделать prototypeId как личное поле.

0 голосов
/ 14 июля 2011

Если вы работаете с аннотациями, попробуйте:

class Card {
  private int id;

  @ManyToOne
  private CardPrototype prototype;  // fixed this line
  ...

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