1-Как обрабатывать исключения в транзакции? Я пытаюсь что-то вроде этого:Весна. сомнения по поводу транзакций
@Transactional(propagation = Propagation.REQUIRES_NEW)
method1(){
...
while(iter.hasNext()){
...
try{
service2.method11();
}catch (Throwable t){
}
}
}
Способ 11 может вызвать исключения. Я бы хотел, чтобы metodo11 исключил исключение, а затем прервал metodo11. Но не откатывайте весь метод транзакции1.
2-Как каждый запрос выполняется в транзакции? я определяю услуги следующим образом:
@Service
@Transactional
public class Service1 ...
Является ли это правильный путь?
3-Могу ли я принудительно сохранить элемент до окончания транзакции? В Repository я определил запрос вроде следующего:
public List<Person> getOldsPet(){
return em.createQuery("SELECT p FROM Pet Where p.birthday = (SELECT MIN (p2.birthday) FROM Pet p2)").getResultList()
}
, если у меня есть следующий код:
Person person1 = new Person();
...
Pet pet1 = new Pet();
pet1.setPerson(person1);
...
person1.getPets().add(pet1);
...
personRepo.create(person1);
List<Pet> olds = petRepo.getOldsPet();
«getOldsPet()» метод не может найти Pet1, который был недавно создан.
Люди класса выглядит следующим образом:
@Entity
@Table (name = "person")
@Audited
public class Person implements Serializable {
...
@OneToMany(cascade = CascadeType.ALL, mappedBy = "person")
private List<Pet> pets;
Извините за мой английский. Спасибо за любые советы
Просто используйте [соответствующее свойство] (HTTP: //docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html#noRollbackForClassName--) в аннотации. Либо, если вы не хотите откатываться от конкретного исключения, установите этот класс; или поймать все исключения и повторить в качестве определенного типа. –
Вы задали 3 отдельных вопроса в одном Вопросе. Он «слишком широк». Пожалуйста, отредактируйте его, чтобы задать только один вопрос, а затем отправить остальных в качестве отдельных Вопросов. (Если вы этого не сделаете, ваш вопрос скорее всего будет закрыт.) –