问题描述
Parent和Children建立一对多的双向关联。Parent类的Children属性是Set类型的。数据库里面和parent关联的child记录是2条,这个确认过。但是parent.getChindren().size()的值是1。但是用HQL方式用相同的条件查询,"from Child c where c.parentId=" + parent.getId(),结果是2。我把parent.getChindren().size()时在控制台输出的sql语句复制出来替换掉问号,直接去查询数据库,结果也是2条记录。为什么直接输出size的值是1而其他方法查询的结果是2?我已经覆盖了对象的hashCode和equals方法了,我在hashCode和equals里添加了输出,发现hashCode执行了一遍,equals没有执行,是不是说在初始化children的时候只有1个对象被添加到set里? 应用里其他地方的一对多映射都正常,唯独这里有问题。Child不止和Parent有关联,还和其他的对象有同样的关联,那些就正常。<set name="children" cascade="none" inverse="true" lazy="true" sort="natural"> <key column="parentId" /> <one-to-many class="com.bean.Child" /></set><many-to-one name="Parent" column="parentId" class="com.bean.Parent" not-null="false" cascade="none" /> 问题补充:我实在Application里面做的试验,用的同一个session,还是这个问题。
解决方案
缓存问题。拿过来之前把session同步下再看看。