我设法在本地重现了该问题中确切描述的问题,尽管在将丢失的get / set函数和
UserRepository该类添加回去之后:
经过一番挖掘后,我发现[与Bean ValidationAPI结合使用时,两个现存的问题JPAConstraintViolation vsRollback和Hibernate没有遵循JPA规范?
两者似乎都得出结论:Hibernate没有ConstraintValidationException
正确抛出。
第二个问题的结果是一个缺陷HHH-8028-EntityManager.persist没有引发针对Hibernate的ConstraintValidationException。
为了确认这是相同的问题,我切换到简单
@GeneratedValue并
insertWrongEmail通过了。
insertToShortPassword仍然失败,但我
@Size(min=6)在密码字段中将其归结为丢失。添加之后,所有测试均通过。
回到您的配置
@GeneratedValue,然后将Hibernate换成Eclipselink持久性框架。两项测试均通过,这似乎可以证实先前问题的发现。我所做的更改是:
pom.xml的
更改添加了Eclipselink网站上描述的jpa工件
<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <version>2.4.0</version> <scope>compile</scope></dependency>
test-context.xml 更改
切换到
EclipselinkJpaVendorAdapter
<bean id="jpaAdapter" p:generateDdl="true" p:database="HSQL" />
添加
eclipselink.weaving属性,如EclipselinkJpaVendorAdapter所述,而不是HibernateJpaVendorAdapter问题
<bean id="entityManagerFactory" p:dataSource-ref="dataSource" p:jpaVendorAdapter-ref="jpaAdapter" > <!-- existing configuration is identical --> <property name="jpaPropertyMap"> <map> <entry key="eclipselink.weaving" value="false"/> </map> </property></bean>
User.java 更改
我需要添加一个默认的无参数构造函数。您可能已经在
User.java全班学习了。



