2011-04-01 79 views
0

我有这样的情况,我有这样的关系:休眠映射一个对象没有关系

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

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

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

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

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

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

有谁知道这是否可能?

回答

0

这里有两个问题:

  • 数据的延迟加载和
  • 实体解析/客户端

有可用来帮助框架上的一个实体的一个规范的实例,但问题还没有一个很好的通用解决方案。

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

,当我读到一个人的对象,我想填补基于存储的地址ID的瞬态地址对象

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

然而,如果数据被加载了独立的呼叫,您会收到两个实例Address,这是一个issue被提名为V3落实。

相信Cairngorm Integration library试图解决这个问题,但是维基表明,它是LCDS只有你可以调查用BlazeDS实现这个功能的必要条件,我没有使用过这个库,所以不能说它能够很好地解决你的问题问题。

+0

谢谢,我将看看dpHibernate库。我们尝试了Gilead,因为这看起来很有希望,但是我们遇到了一个错误,不幸的是没有人在论坛上做出回应。 – 2011-04-18 14:07:33