【发布时间】:2022-11-21 00:28:36
【问题描述】:
假设我有以下存储库:
public interface ApplicationRepository extends JpaRepository<Application, Integer> {
public boolean existsByCode(String code);
public Optional<Application> findByCode(String code);
}
以及以下服务:
@Service
@RequiredArgsConstructor
public class ApplicationService {
private final ApplicationRepository appRepo;
public Application findById(Integer id) throws RecordNotFoundException {
return appRepo.findById(id)
.orElseThrow(() -> new RecordNotFoundException("Application with id: " + id + " could not be found"));
}
public boolean existsByCode(String code) {
return appRepo.existsByCode(code);
}
public Application findByCode(String code) throws RecordNotFoundException {
return appRepo.findByCode(code).orElseThrow(
() -> new RecordNotFoundException("Application with code: " + code + " could not be found"));
}
}
-
由于默认的存储库方法有@Transactional(readOnly = true),我应该在我的自定义方法上添加注释吗?如果是这样,最好在服务方法或存储库上添加注释?
-
如果我有第三种方法,它调用另外两个标有@Transactional(readOnly = true) 的方法,是否最好也用注解标记这个方法?
【问题讨论】:
-
请阅读:Can I ask only one question per post? --- 这两个问题都无法明确回答。这取决于交易边界,即什么应该是交易的一部分。对于第二个问题尤其如此。
-
是什么让你说“默认存储库方法有
@Transactional(readOnly = true)?我在source code of JpaRepository或其超类型中没有看到任何这样的注释?
标签: java spring-boot hibernate jpa spring-data-jpa