【问题标题】:Hibernate Map an object without relationHibernate Map 一个没有关系的对象
【发布时间】:2011-04-01 08:24:39
【问题描述】:

我有这样的关系:

一个人有一个或多个地址。 一位客户有一个或多个地址。

Person、customers 和 address 是单独的表。

我曾经使用@OneToMany 关系来做到这一点。 这给我带来了问题,因为我们的 flex 客户端正在向我发送对象,这些对象是在客户端中创建的,并且必须在数据库中创建。

如果客户向我发送一个人和客户引用相同的地址,休眠将创建两个地址对象,因为这两个地址对象不是相同的 java 对象(不是相同的指针)。

这是由 BlazeDS 和 Dozer 引起的问题,它们在发送到服务器时会创建新对象。

所以我想要的是人员和客户对象中没有关系的地址 ID,因此休眠不会创建对象。但是当我读取一个人对象时,我想根据存储的地址 id 填充一个临时地址对象。

有谁知道这是否可行?

【问题讨论】:

    标签: apache-flex hibernate blazeds dozer


    【解决方案1】:

    这里有两个问题:

    • 延迟加载数据和
    • 实体解析/客户端上实体的单个规范实例

    有一些框架可以提供帮助,但这个问题还没有一个很好的通用解决方案。

    dpHibernate 将有助于延迟加载数据 - 即:

    当我读取一个人对象时,我想根据存储的地址 id 填充一个临时地址对象

    不幸的是,dpHibernate 中的多个调用尚不支持实体解析。即 - 如果调用在服务器调用中的两个位置返回相同的对象(例如,Customer id:1Customer id:2 中的相同 Address 实体,那么您将在两个客户中收到 Address 的单个实例对象。

    但是,如果数据是通过单独的调用加载的,您将收到两个 Address 实例。这是一个issue,计划在 v3 中实现。

    我相信Cairngorm Integration library 试图解决这个问题,但是 wiki 建议它只是 LCDS。您可以调查使用 BlazeDS 实现此功能所需的条件。我没有使用过这个库,所以不能说它会如何解决你的问题。

    【讨论】:

    • 谢谢,我会看看 dpHibernate 库。我们尝试了 Gilead,因为这看起来很有希望,但我们遇到了错误,不幸的是,论坛上没有人回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2021-05-28
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    相关资源
    最近更新 更多