iBatis循环引用问题

时间:2010-02-24 22:37:21

标签: sql orm ibatis

我有一个Office对象和一个设备对象。 Office有设备,设备属于办公室。因此,获取Office对象应该填充Office.Device引用,并且Device对象应该具有它所属的Office对象。我想这是一个循环参考。

我想在iBATIS中这样做,但我无法弄清楚如何正确地做到这一点。

这几乎就像我需要一个resultMap,我可以“将此属性设置为由我调用的resultMap创建的对象”。而是使用另一个查询(N + 1,我知道)填充此属性(对象),或使用结果集和此其他resultMap填充此属性。

我不介意为这种情况创建另一个resultMap。

另一个完全可以接受的答案是,iBATIS不会这样做,因为您的架构存在缺陷。如果是这种情况,请给我一些其他选择。

2 个答案:

答案 0 :(得分:0)

http://www.javalobby.org/java/forums/t75161.html附近有一个示例,包含另一个resultMap的结果作为属性。我从来没有这样做,但从他的例子来看,似乎它会起作用。您可能有4个SQL查询:1个用于办公室,相关的一个用于拉取关联设备,然后是相应的设备查询,其中一个用于拉取关联的办公室。希望这会有所帮助。

答案 1 :(得分:0)

如果设备只需要具有对其所在的Office的循环引用,并且没有办公室可以包含设备的情况,并且该设备可以包含其他办公室的列表。

然后RowHandler可能会完成这项工作。通过SQL映射以正常方式查询办公室和设备,并使办公室满足设备关系。然后在与查询调用关联的RowhHandler中,在设备的成员中填充包含office对象的引用,从而进行循环引用,并且不需要额外的查询。