问题描述
两张表A B ,表B结构: id, xid(其中id是主键,xid可看做id的父节点),name例如:id:1, xid:0, name:floorid:2, xid:0, name:second floorid:10, xid:1, name: floor-oneid:11, xid:1, name: floor-twoid:12,xid:1, name: floor-three表A中含有表B的一个对象属性private B b相关映射文件a.hbm.xml中设置:<many-to-one name="bObj" class="pojo.B"> <column name="xid"/></many-to-one>我的目的是在做检索操作的时候,能根据检索条件id = 10, 找到对应的xid的值(1),在把这个xid作为关键字检索得到id=1的相关属性值我现在在表B中增加了一个属性class B{ private B parentObj;} 对应的映射文件中b.hbm.xml设置:<hibernate-mapping> <class name="pojo.B" table="B"> <id name="id"> <generator class="native"/> </id> <property name="name"> <one-to-one name="parentObj" class="pojo.B" formula="(select b.name from B b where b.ID = ?????)"/> <many-to-one/> </class></hibernate-mapping>我的映射文件该怎么设置,单步调试的时候看到b对象中的parentObj为null
解决方案
引用我的目的是在做检索操作的时候,能根据检索条件id = 10, 找到对应的xid的值(1), 在把这个xid作为关键字检索得到id=1的相关属性值 这不就是自连接么。你把xid当做主健,再把id当做外件。这样去映射一个one-to-many的set。问题就OK了。