Spring与hibernate集成时候,Dao层一般继承hibernateDaoSupport类,由spring来管理session的生命周期,在使用的时候,当service层调用dao层时候,servcie传参数一般都是非持久化po,所以在保存含有外键关联的时候要有一个原则:要保存的表里面含有的外键实体必须是Po对象 否则会抛出一个InvalidDataAccessApiUsageException异常 :object references an unsaved transient instance - save the transient instance before flushing,所以必须让外键也是PO对象。例子
Cat cat=new Cat();
Animal a=new Animal();
a.setAnimal(cat);
BaseDao.save(a);
此时会抛以上错误
当
Cat cat=CatDao.Load(Cat.class,id);
Animal a=new Animal();
a.setAnimal(cat);
BaseDao.save(a);
此时不会出错
我也不知道这个什么hibernate的什么原理,希望高手看到了能够讲讲其中的原理。