我是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实现这个目标吗?
答案 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
作为私人字段。