0

我有这样的关系:

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

人员、客户和地址是单独的表。

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

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

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

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

有谁知道这是否可能?

4

1 回答 1

0

这里有两个问题:

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

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

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

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

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

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

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

于 2011-04-12T15:17:39.490 回答