【发布时间】:2018-05-28 12:39:06
【问题描述】:
简化示例:
@Entity
public class Foo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String bar;
// getters + setters
}
public interface FooRepository extends CrudRepository<Foo, Integer> {
}
@Service
public class FooService {
private final FooRepository repository;
public FooService(FooRepository repository) {
this.repository = repository;
}
public Foo save(Foo foo) {
return repository.save(foo);
}
}
从控制器调用fooService.save(myNewFoo) 是可行的,但我预计它会失败(如果我正确理解事务),因为没有方法用@Transactional 注释(我实际上希望它失败)。知道为什么会出现这种行为吗?谁在现场创建交易,如何避免这种情况?
其他细节:
- Java 9
- MySQL 连接器 6.0.6
- 休眠 5.2.12
- Spring Boot 2.0.0.M7
- Spring Data JPA 2.0.2.RELEASE
【问题讨论】:
-
默认
CrudRepository和好友的方法是@Transactional。 -
@M.Deinum 有什么办法让他们不是
@Transactional那么?除了自己重写整个实现之外?我希望我的服务负责交易,否则失败。 -
@M.Deinum 也许我可以扩展
SimpleJpaRepository并以某种方式禁用@Transactions? -
如何阅读发行说明...jira.spring.io/browse/DATAJPA-685
-
@M.Deinum 听起来不错。
标签: java mysql hibernate spring-boot spring-data-jpa