我正在学习 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()
)是否可以在没有交易的情况下使用?就像这里的情况一样。
如果没有事务,您就无法保存或持久化对象,您必须在保存对象后提交事务,否则它将不会保存在数据库中。 没有事务,你只能从数据库中检索对象
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;
}
}