继承类的@Transactional:org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
假设有以下类:
@Transactional public class SubClass extends SuperClass { public void loadDb(){ //数据库操作 } } public class SuperClass { public void savedb() { //数据库操作 } }
savedb是父类的方法,loadDb是子类的方法。如果有以下调用:
@Test public void test(){ SubClass o = new SubClass(); o.savedb();//将会报没有Session的错误 o.loadDb();//正常 }
可以看到在调父类方法时Hibernate报没有Session的错误(org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here),子类没有问题。
解决办法一:在子类中重载父类方法:
@Transactional public class SubClass extends SuperClass { public void loadDb(){ } @Override public void savedb() { super.savedb(); } }
解决方法二:在父类中标注@Transactional(父类是抽象类也可以):
@Transactional public class SuperClass { public void savedb() { } }