我的情况是我有这样的关系:
一个人有一个或多个地址。 客户有一个或多个地址。
人员,客户和地址是单独的表格。
我曾经和@OneToMany关系这样做。 这给我带来了问题,因为我们的Flex客户端向我发送了在客户端创建的对象,并且必须在数据库中创建。
如果客户端向我发送了一个引用同一地址的人和客户hibernate将创建两个地址对象,因为这两个地址对象不是相同的java对象(不是相同的指针)。
这是由BlazeDS和Dozer引起的问题,它会在发送到服务器时创建新对象。
所以我想要的是没有关系的person和customer对象中的地址id,所以hibernate不会创建对象。但是当我读取一个人物时,我想根据存储的地址id填充一个瞬态地址对象。
有人知道这是否可行?
答案 0 :(得分:0)
这里有两个问题:
有一些框架可以提供帮助,但问题还没有很好的通用解决方案。
dpHibernate将有助于延迟加载数据 - 即:
当我读取一个person对象时,我想根据存储的地址id
填充一个瞬态地址对象
不幸的是,dpHibernate中的多个调用尚不支持实体解析。 ie - 如果一个调用在服务器调用中的两个位置返回相同的对象(例如,Address
和Customer id:1
中的同一个Customer id:2
实体,那么您将收到一个两个客户对象中都Address
。
但是,如果通过单独调用加载数据,您将收到两个Address
实例。这是issue,它将在v3中实现。
我相信Cairngorm Integration library试图解决这个问题,不过维基建议它只是LCDS。您可以使用BlazeDS调查实现此功能所需的内容。我没有使用过这个库,所以不能说它能解决你的问题。