Hibernate映射没有关系的对象

时间:2011-04-01 08:24:39

标签: flex hibernate blazeds dozer

我的情况是我有这样的关系:

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

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

我曾经和@OneToMany关系这样做。 这给我带来了问题,因为我们的Flex客户端向我发送了在客户端创建的对象,并且必须在数据库中创建。

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

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

所以我想要的是没有关系的person和customer对象中的地址id,所以hibernate不会创建对象。但是当我读取一个人物时,我想根据存储的地址id填充一个瞬态地址对象。

有人知道这是否可行?

1 个答案:

答案 0 :(得分:0)

这里有两个问题:

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

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

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

  

当我读取一个person对象时,我想根据存储的地址id

填充一个瞬态地址对象

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

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

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