У меня есть следующая таблица оракулов ..
create table post (id number(10,0) not null, text varchar2(255 char), title varchar2(255 char), update_date date, version number(10,0), primary key (id));
Моя сущность выглядит примерно так ..
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Post {
@Id Integer id;
String title;
String text;
@LastModifiedDate @Temporal(TemporalType.TIMESTAMP) Date updateDate;
@Version Integer version;
....
}
Хранилище это просто ...
public interface PostRepository extends JpaRepository<Post, Integer>{
}
Следующий тест не пройден ...
@RunWith(SpringRunner.class)
@SpringBootTest
public class PostRepositoryTest {
@Autowired protected JdbcTemplate jdbcTemplate;
@Autowired PostRepository postRepo;
private static final Integer TEST_POST_ID = -1;
private static final String TEST_TEXT = "This is the text.";
@Before
public void setup() {
String insertPostSql = "insert into POST (ID, TITLE, TEXT, UPDATE_DATE, VERSION) values (?, ?, ?, ?, ?)";
jdbcTemplate.update(insertPostSql, new Object[]{TEST_POST_ID, "Title 1.", TEST_TEXT, new Date(), 0});
}
@After
public void teardown() {
String deletePostSql = "delete from POST where ID = ?";
jdbcTemplate.update(deletePostSql, new Object[]{TEST_POST_ID});
}
@Test
public void testUpdateA() throws Exception {
Post post = postRepo.findById(TEST_POST_ID).get();
post.setTitle(TEST_TEXT+" Amendment.");
Post updatedPost = postRepo.save(post);
assertNotEquals(post.getVersion(), updatedPost.getVersion());
Post updatedPost2 = postRepo.save(updatedPost);
assertEquals(updatedPost.getVersion(), updatedPost2.getVersion());
}
}
Второе обновление объекта сохраняется в базе данных, даже если ничего не изменилось.Если я изменю тип столбца даты обновления в базе данных на TIMESTAMP, тест пройден успешно.К сожалению, я не могу этого сделать, есть ли что-то еще, что я могу сделать, так как дата в возвращенном экземпляре из вызова сохранения не равна дате в базе данных в соответствии с грязной проверкой JPA.Заранее спасибо.