Hibernate通过工厂创建关系对象

时间:2011-07-14 11:51:48

标签: java hibernate persistence

我是Hibernate的新手,我正在尝试实现以下目标:我正在使用的类是持久的并存储在DB中。它看起来像这样:

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

并且所有需要的getter和setter以及注释用于持久性。 Class Card像这样存储在DB表中

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

关系中的类是CardPrototype,它由字符串标识符标识,并且根本不存储在数据库中。但是,我有一个非静态方法的工厂类

CardPrototype getPrototype (final String id)

我想在ORM对象加载期间用来解析Card.prototype字段。你能帮助我用Hibernate实现这个目标吗?

3 个答案:

答案 0 :(得分:1)

您可以使用@Type注释并自行加载和保存。请参阅How to store date/time and timestamps in UTC time zone with JPA and Hibernate,尤其是UtcTimestampType的答案。

答案 1 :(得分:0)

如果您正在使用注释,请尝试:

class Card {
  private int id;

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

};

答案 2 :(得分:0)

一个简单的解决方案是在Card类中添加String prototypeId字段。然后使用@PostLoad从字符串ID

获取工厂中的对象
@PostLoad
public void loadCardProtoType() {
   CardPrototypeFactory factoryInstance = new CardPrototypeFactory();
   setCardPrototype(factoryInstance.getPrototype(this.prototypeId));
}

现在,当您使用Card类时,您将拥有CardPrototype实例。您也可以将prototypeId作为私人字段。