簡體   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