【发布时间】:2021-02-15 07:28:44
【问题描述】:
我正在使用带有 Java Springboot 的 DB2 数据库和 JPA/Hibernate,但是在使用 JPA 的 .save() 方法时回滚事务不起作用。我的主要实体没有被保存,因为它被另一个程序使用/阻止,但它的子实体被保存了。但我需要全部或全部!
例如: 我的项目 A 和 B 中有两个实体。A 有一个 B 列表:
@Entity
@Data // Lombok
public class A {
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<B> bs;
}
@Entity
@Data
public class B {
// some fields.
}
当我将 B 添加到 A 中的列表并保存时,它应该在 B 的 db-table 中添加一行。这工作正常。
但是如果 A 有错误,即它被另一个程序阻止,它也会保存更改的 B,但它不应该。我已经尝试过使用@Transactional,但它并没有改变任何东西。保存 A 返回一个异常,但 Bs 列表被保存,尽管它应该回滚到我的理解:/
try {
A savedA = aRepository.save(a);
return savedA;
} catch (DataAccessException e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Is already used by another program.", e);
}
【问题讨论】:
标签: java spring jpa transactions db2