我正在关注Hibernate的教程并看到以下代码:
package com.websystique.spring.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
public abstract class AbstractDao {
@Autowired
private SessionFactory sessionFactory;
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
public void persist(Object entity) {
getSession().persist(entity);
}
public void delete(Object entity) {
getSession().delete(entity);
}
}
我想知道在没有交易的情况下是否可以使用persist()
(或save()
或delete()
)?似乎就是这种情况。
答案 0 :(得分:2)
你不能保存或持久化对象而没有事务,你必须在保存对象后提交事务,否则它不会保存在数据库中。 如果没有交易,您只能从数据库中检索对象
答案 1 :(得分:1)
如上所述,您可以在没有活动交易的情况下保存数据库中的任何内容。 它确定你使用的是容器,在这种情况下是Spring。 Spring可以通过像JavaEE这样的拦截器来控制事务。 您可以在此处阅读更多内容:http://docs.jboss.org/weld/reference/2.4.0.Final/en-US/html/interceptors.html
此外,这似乎是一个非常糟糕的例子:
public class TransactionalInterceptor {
@Inject
private Session session;
@AroundInvoke
public Object logMethodEntry(InvocationContext ctx) throws Exception {
Object result = null;
boolean openTransaction = !session.getTransaction().isActive();
if(openTransaction)
session.getTransaction().begin();
try {
result = ctx.proceed();
if(openTransaction)
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
throw new TransactionException(e);
}
return result;
}
}