【问题标题】:Cannot fetch @Any related entity due to LazyInitializationException由于 LazyInitializationException,无法获取 @Any 相关实体
【发布时间】: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


    【解决方案1】:

    您正在尝试访问分离对象的集合。 分离的对象意味着它没有连接到会话。因此,在访问惰性集合时,您会收到异常。 这可能由于不同的原因而发生。例如,您通过序列化从前端接收对象。 有 2 种可能的解决方案,具体取决于所需的结果。

    1) 您可以定义要急切获取的集合。这意味着一旦父对象被初始化,集合就会被初始化。 2) 你可以合并对象(T mappedObject em.merge(detachedObject);) 一个访问它的集合。

    一个小警告:em.merge() 返回一个合并对象。但是,旧的仍然是分离的,所以记得访问合并的。

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多