我可以使用当前版本的Unitils(3.1)和JPA 2.0吗?

Jan*_*Jan 1 unit-testing hibernate jpa

使用Hibernate EntityManager 3.5.3-Final和Unitils 3.1会导致:

unitilsAfterTestTearDown(com.unifiedpost.payments.model.TestAccount)  Time elapsed: 0.02 sec  <<< FAILURE!
java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:621)
        at org.unitils.orm.jpa.util.provider.hibernate.UnitilsHibernatePersistenceProvider.createContainerEntityManagerFactory(UnitilsHibernatePersistenceProvider.java:47)
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:227)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:281)
        at org.unitils.orm.jpa.util.JpaEntityManagerFactoryLoader.createEntityManagerFactoryBean(JpaEntityManagerFactoryLoader.java:77)
Run Code Online (Sandbox Code Playgroud)

这也在以下网站报道:http: //jira.unitils.org/browse/UNI-201

Jan*_*Jan 5

原因是unitils-orm依赖于Spring的2.5.x版本,但尚未准备好JPA2版本.

[INFO] +- org.unitils:unitils-testng:jar:3.1:test
[INFO] +- org.unitils:unitils-orm:jar:3.1:test
[INFO] |  +- org.unitils:unitils-spring:jar:3.1:test
[INFO] |  |  +- org.springframework:spring-core:jar:2.5.2:test
[INFO] |  |  +- org.springframework:spring-beans:jar:2.5.2:test
[INFO] |  |  +- org.springframework:spring-test:jar:2.5.2:test
[INFO] |  |  \- org.springframework:spring-tx:jar:2.5.2:test
Run Code Online (Sandbox Code Playgroud)

也可以看看:

您有2个解决方法选项:

(1)补丁单位:

<properties>
    <spring.version>3.0.3.RELEASE</spring.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
Run Code Online (Sandbox Code Playgroud)

(2)包含修补的MutablePersistenceUnitInfo

  • 在项目中复制Spring MutablePersistenceUnitInfo(并确保它在类路径中的旧版Spring之前)
  • 添加缺少的方法.
@Override
public String getPersistenceXMLSchemaVersion() {
    return "1.0";
}

@Override
public SharedCacheMode getSharedCacheMode() {
    return SharedCacheMode.NONE;
}

@Override
public ValidationMode getValidationMode() {
    return ValidationMode.NONE;
}
Run Code Online (Sandbox Code Playgroud)

[回复自己以供日后参考]