我使用 Spring Boot 和 Oracle 11g 进行了简单的 CRUD 操作,我的实体类如下所示:
public class Entity{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int entity_id;
...
@CreationTimestamp
@Column(name = "creation_date", columnDefinition="ON UPDATE CURRENT_TIMESTAMP")
@Temporal(TemporalType.TIMESTAMP)
private Date creation_date;
...//setters and getters
}
我的 JUnit 看起来像
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class EntityTests {
Logger log = Logger.getAnonymousLogger();
@Autowired
private EntityRepository entityRepository;
@Test
public void addEntity(){
Entity entity= new Entity();
entity.setFirst_name("Jhon");
entity.setLast_name("David");
Entity savedEntity = entityRepository.save(entity);
log.info(savedEntity.toString());
Assert.assertEquals(entity, savedEntity);
//log.info(savedEntity.getCreation_date().toString());
}
最后一个 log.info 在使用 @Transactional 注释运行时会抛出 NullPointerException,但否则工作正常,并且 DB 会填充预期值。
这是 @Transactional 的行为方式还是 Hibernate 没有在事务性 JUnit 中为 Dates 插入任何值?