![](/img/trans.png)
[英]Persist (or find) an object with jpa does not save the list of object that it encapsulates
[英]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.