Hibernate 由于LazyInitializationException,无法获取@任何相关实体
有谁能帮我处理任何关系吗 我有一个接口Hibernate 由于LazyInitializationException,无法获取@任何相关实体,hibernate,lazy-initialization,any,Hibernate,Lazy Initialization,Any,有谁能帮我处理任何关系吗 我有一个接口InteractionParticipate,每个想参与某种消息传递交互的人都可以实现这个接口。消息由具有发送器和接收器的InteractionMessage表示。由于我们不知道实现interactionparticiate的实体将是消息的接收者(或发送者),因此我们必须使用@任何关系 我读过一些启发我的东西,并在InteractionMessage中这样写道: @Any(metaColumn = @Column(name = "Transmitter_Ty
InteractionParticipate
,每个想参与某种消息传递交互的人都可以实现这个接口。消息由具有发送器和接收器的InteractionMessage
表示。由于我们不知道实现interactionparticiate
的实体将是消息的接收者(或发送者),因此我们必须使用@任何关系
我读过一些启发我的东西,并在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 message = (InteractionMessage) session.get(InteractionMessage.class, id);
InteractionMessage=(InteractionMessage)会话.get(InteractionMessage.class,id);
我面临的是,我既不能获取接收器
也不能获取发射器
,因为方法抛出了“org.hibernate.lazyiinitializationexception”异常。无法评估。。。空缺$$\u javassist_49.toString()。(空缺类正在实施交互参与
)
我试图玩@LazyToOne
甚至@LazyCollection
,但失败了
请帮我弄清楚。提前谢谢 您正在尝试访问分离对象的集合。
分离的对象表示它未连接到会话。因此,当访问惰性集合时,您会收到一个异常。
这可能是由于不同的原因。例如,通过序列化从前端接收对象。
根据需要的结果,有两种可能的解决方案
1) 您可以定义要急切获取的集合。这意味着一旦父对象被初始化,集合就被初始化。
2) 可以将对象(T mergedObject em.merge(detachedObject);)合并到访问其集合中
一个小警告:em.merge()返回一个合并对象。但是,旧的仍然是分离的,因此请记住访问合并的