【发布时间】:2012-10-04 05:34:42
【问题描述】:
谁能帮我处理@Any的关系?
我有一个接口InteractionParticipate,每个想要参与某种消息交互的人都可以实现它。一条消息由InteractionMessage 表示,它有一个发送器和一个接收器。由于我们不知道实现InteractionParticipate 的实体将成为消息的接收者(或发送者),因此我们必须使用@Any 关系。
我读过this one,它启发了我并在InteractionMessage 中写了类似的内容:
@Any(metaColumn = @Column(name = "Transmitter_Type"))
@AnyMetaDef(
idType = "long",
metaType = "string",
metaValues = {
@MetaValue(value = "Applicant", targetEntity = Applicant.class),
@MetaValue(value = "Vacancy", targetEntity = Vacancy.class)
})
@JoinColumn(name = "Transmitter_Id")
@LazyToOne(LazyToOneOption.FALSE)
private InteractionParticipate transmitter;
@Any(metaColumn = @Column(name = "Receiver_Type"))
@AnyMetaDef(idType = "long", metaType = "string",
metaValues = {
@MetaValue(targetEntity = Applicant.class, value = "Applicant"),
@MetaValue(targetEntity = Vacancy.class, value = "Vacancy")
})
@JoinColumn(name = "Receiver_Id")
@LazyToOne(LazyToOneOption.FALSE)
private InteractionParticipate receiver;
数据库创建良好,我可以看到实体正确保存。但是当我尝试从数据库中获取InteractionMessage 时
InteractionMessage message = (InteractionMessage) session.get(InteractionMessage.class, id);
我面对我既不能得到receiver 也不能得到transmitter,因为方法抛出了“org.hibernate.LazyInitializationException”异常。无法评估... Vacancy_$$_javassist_49.toString()。 (空缺班级正在实施InteractionParticipate。)
我尝试与@LazyToOne 甚至@LazyCollection 一起玩,但失败了。
请帮我弄清楚。提前致谢!
【问题讨论】:
标签: hibernate lazy-initialization any