我有下面的代码,我正在使用spring和hibernate
//主类中的主要方法
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正常工作。有人可以解释原因吗?
答案 0 :(得分:0)
在标准配置中没有事务处理的情况下,Hibernate会话无法正常工作。如果您添加此属性
<property name="connection.autocommit">true</property>
方案#1将起作用。
答案 1 :(得分:0)
因为Hibernate默认情况下不提交事务。我建议使用Spring's Transaction Manager来处理这个逻辑,而不是手动提交/回滚。如果一切正常,它会自动提交事务,并在出现任何错误时回滚事务。使用正确的Spring配置,您的代码将如下所示:
class ServiceClassType {
@Transactional
public doTask(){
// update entities with your DAO classes
}
}