Hibernate3的缺点,一级缓存的强引用的问题,所以在做批量查询和插入操作的时候需要执行session.flush和session.clear两个操作。
flush()使用 :(在spring声明事务的情况下)
若A引用 了B,现在同时增加这两个类,如果你不用的hibernate自动处理机制 ,则需要在save(B)后,调用 flush()强行的写入数据库,再将返回的主键写入A中,再save(A),否则将报出找不到B的错误,这是因为声明式事务的方法是在方法结束后一起提交,因此会出现异常。
clear() 使用
在实际过程中可能会出现这样的情况,需要创建A,A完全的copy自B(此时的B是根据ID get()得到的),而A.B又是属于同一张表的实体,因此在save(A)时,会出现异常,提示你有两个相同的数据,却是不同的标识,异常抛出后无法正常的保存,
那怎么解决呢,这时候你就需要在save()执行前加上一个clear()了,如:
getHibernateTemplate().clear();
getHibernateTemplate().save(t11);