為什么將Entity保存到資料庫后,selectSQL查詢回傳0結果?
我在測驗中使用 Spring 2.6.2、Hibernate 5、H2 db。
這是我的測驗:
@Transactional
@Test
void test_OptimisticLockExceptionOnUpdate() throws SQLException {
String reportText = "Initial value: " new Date();
ReportDTO reportDTO = new ReportDTO();
reportDTO.setText(reportText);
// Save a report
reportDTO = reportService.submit(reportDTO);
Connection connection = multiTenantConnectionProvider.getAnyConnection();
String sql = "select * from PUBLIC.report";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
String text = resultSet.getString("text");
System.out.println(text);
}
我的服務中的方法保留了一個表示 DTO 物件的新物體:
@Transactional
public ReportDTO submit(ReportDTO input) {
ReportEntity reportEntity = new ReportEntity();
reportEntity.setText(input.getText());
reportEntity = reportRepository.save(reportEntity);
input.setId(reportEntity.getId());
input.setVersion(reportEntity.getVersion());
return input;
}
uj5u.com熱心網友回復:
有兩種可能的解釋:
- 由于您的測驗帶有注釋,
@Transactional所有內容都在單個事務中運行。當您要求 JPA 執行此操作時,它不會保存您的物體。相反,它只是跟蹤它們以將它們保存到必要的資料庫中,這通常只是在事務結束時。它還會在執行查詢之前重繪 對資料庫的更改,但前提是它們是通過 JPA 執行的,否則它不會知道它們。 - 您正在
getAnyConnection使用multiTenantConnectionProvider. 這可能是也可能不是EntityManager. 如果不是,它將永遠不會看到更改,EntityManager如果您的資料庫防止臟讀,因為測驗在測驗結束時回滾事務。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/520991.html
