繁体   English   中英

gethibernatetemplate()。save(object)不持久化数据

[英]gethibernatetemplate().save(object) does not persist data

我有下面的代码,并且正在使用spring和hibernate

//主类中的main方法

public static void main(String[] args) {        
        String[] path = new String[]{"applicationContext.xml"};
        ApplicationContext context = new ClassPathXmlApplicationContext(path); 
        serviceObj = (ServiceClassType)context.getBean("serviceBean");
        serviceObj.doTask();  

    }

//服务类中的服务方法

doTask(){
Obj obj=new Obj();
obj.setValue1("value1");
obj.setValue2("value2");
myDao.saveObject(obj);

}

//在dao类中//场景#1

saveObject(Obj obj){
gethibernatetemplate().save(obj);
}

//方案#2

saveObject(Obj obj){
session = getHibernateTemplate().getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        session.save(obj);
        tx.commit();
}

***方案1不能持久保存数据,但方案2可以正常工作。 有人可以解释为什么吗?

如果没有标准配置中的“事务处理”,则Hibernate Session将无法工作。 如果添加此属性,则<property name="connection.autocommit">true</property>方案#1将起作用。

因为默认情况下,Hibernate不提交事务。 我建议使用Spring的Transaction Manager来处理此逻辑,而不是手动提交/回滚。 如果一切正常,它将自动提交事务,并在出现任何错误的情况下回滚事务。 使用正确的Spring配置,您的代码将如下所示:

class ServiceClassType {
   @Transactional 
   public doTask(){
      // update entities with your DAO classes
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM