简化示例:
@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
注释(而且我实际上希望它失败)。知道为什么会有这种行为吗?谁在幕后创建交易,如何避免这种情况?
其他详细信息: