Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 由于LazyInitializationException,无法获取@任何相关实体_Hibernate_Lazy Initialization_Any - Fatal编程技术网

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()返回一个合并对象。但是,旧的仍然是分离的,因此请记住访问合并的