【发布时间】:2026-01-25 10:00:01
【问题描述】:
我想要完成的是:
- 已启用自动提交,因此默认情况下所有查询都会提交
- 如果方法上有@Transactional,它会覆盖自动提交并将所有查询包含在单个事务中,从而覆盖自动提交
- 如果有一个@Transactional方法调用其他@Transactional注解的方法,最外层的注解应该覆盖内部的注解并创建一个更大的事务,因此注解也会相互覆盖
我目前仍在学习 spring-orm,找不到有关此的文档,并且还没有测试项目。
所以我的问题是:
- 春季交易的默认行为是什么?
- 如果默认值与我的要求不同,有没有办法配置我想要的行为?
- 还是有完全不同的交易最佳实践?
--编辑--
我有以下测试设置:
@javax.persistence.Entity
public class Entity {
@Id
@GeneratedValue
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Repository
public class Dao {
@PersistenceContext
private EntityManager em;
public void insert(Entity ent) {
em.persist(ent);
}
@SuppressWarnings("unchecked")
public List<Entity> selectAll() {
List<Entity> ents = em.createQuery("select e from " + Entity.class.getName() + " e").getResultList();
return ents;
}
}
如果我有这样的设置,即使在休眠中启用了自动提交,插入方法也不会执行任何操作。我必须将@Transactional 添加到插入或调用插入的方法中才能工作...
有没有办法让@Transactional 完全可选?
【问题讨论】:
标签: java hibernate spring orm jpa