я хотел бы добиться следующего:
- автокоммит включен, поэтому по умолчанию все запросы фиксируются
- если в методе есть @Transactional, он переопределяет автокоммит и объединяет все запросы в одну транзакцию, переопределяя таким образом автокоммит
- если есть метод @Transactional, который вызывает другие аннотированные методы @Transactional, внешняя аннотация должна переопределять внутренние аннотации и создавать более крупные транзакции, таким образом, аннотации также переопределяют друг друга
В настоящее время я все еще изучаю spring-orm и не могу найти документацию по этому вопросу, и у меня пока нет тестового проекта.
Итак, мои вопросы:
- Каково поведение транзакций по умолчанию весной?
- Если значение по умолчанию отличается от моего требования, есть ли способ настроить желаемое поведение?
- Или существует совершенно другая лучшая практика для транзакций?
- EDIT -
У меня есть следующие тестовые настройки:
@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;
}
}
Если у меня так, даже если в hibernate включен автокоммит, метод insert ничего не делает. Мне нужно добавить @Transactional для вставки или метод, вызывающий вставку, чтобы он работал ...
Есть ли способ сделать @Transactional полностью необязательным?