在JUnit测试

时间:2017-05-15 14:50:07

标签: java spring hibernate junit

我们实现了Hibernates PreInsertEventListenerPreUpdateEventListener来初始化和设置插入和最近更改实体的信息,然后再将其保存到数据库中。包含此信息的字段通过JPA @Column(... , nullable = false)注释标记为不可为空。

这个设置工作正常,而我们使用Spring IO Platform Athens-RELEASE。现在我们升级到布鲁塞尔-SR2的Spring IO Plat(问题也出现在Spring IO Platfrom Brussels-RELEASE中),我们的应用程序仍然按预期/之前的行为(在调用监听器之后验证实体)。

但是......我们的JUnit测试失败了,因为在测试设置中,Hibernate现在首先验证字段,然后调用监听器。更新实体时这个顺序是正常的(之前已经设置了最后的更改信息),但是在插入实体时会导致org.hibernate.PropertyValueException: not-null property references a null or transient value - 异常,因为在验证时字段仍为空。 / p>

是否有人观察到同样的行为?关于这里发生了什么以及如何解决这个问题的任何想法/建议?

更多背景资料:

  • 我知道我可以使用JPA来处理PrePersist-Events但是由于我们的项目设置(并且因为我们只在测试设置中观察到问题,而我们的应用程序工作正常)我们非常喜欢基于已经存在的Hibernate Listeners(主要是指the answer given here)。
  • 我们使用Spring Platform提供的Hibernate和JUnit-Versions(只有hibernate-validator从Athens-更改为Brussels-RELEASE):hibernate-core:5.0.11.Final(5.0.12.Final in Brussels-SR2 ),Junit:4.12,hibernate-validator:5.2.4.Final(Athens),5.3.4.Final(Brussels),5.3.5.Final(Brussels-SR2)
  • 我们使用版本为2.5.3的DBUnit
  • 我们通过registry.getEventListenerGroup(EventType.PRE_INSERT).appendListener(...)注册听众,将appendListener(...)替换为prependListener(...)并不帮助

0 个答案:

没有答案