Проблема с диалектом JPA исключение nosuchmethod

Я пытаюсь настроить среду тестирования для своей компании. Они решили использовать JPA для подключения к базе данных сервера Microsoft SQL. Проблема возникает, когда я воссоздал базу данных и, используя их исходный код, не могу подключиться к ней. Это ошибка junit, которую я получаю (все еще о диалекте, а не о junit)

[junit] com.companyname.kernel.persistence.jpa.UnicodeSQLServerDialect.registerColumnType(IILjava/lang/String;)V
[junit] java.lang.NoSuchMethodError: com.companyname.kernel.persistence.jpa.UnicodeSQLServerDialect.registerColumnType(IILjava/lang/String;)V
[junit]     at com.companyname.kernel.persistence.jpa.UnicodeSQLServerDialect.<init>(Unknown Source)
[junit]     at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
[junit]     at java.lang.Class.newInstance(Class.java:438)
[junit]     at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:159)
[junit]     at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:136)
[junit]     at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:78)
[junit]     at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:68)
[junit]     at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:165)
[junit]     at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
[junit]     at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
[junit]     at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
[junit]     at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
[junit]     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
[junit]     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852)
[junit]     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845)
[junit]     at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
[junit]     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844)
[junit]     at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
[junit]     at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
[junit]     at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
[junit]     at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
[junit]     at com.companyname.kernel.services.DBService.start(Unknown Source)
[junit]     at IntegrationUtil.Services.InitiDbservice(Unknown Source)
[junit]     at com.companyname.manage.operation.rejectinvoiceOperationTest.serviceStart(Unknown Source)

Затем я немного почитал и обнаружил, что это обычно вызвано конфликтом библиотек:

hibernate-commons-annotations.jar 4.0.5 
hibernate-entitymanager.jar
hibernate-c3p0.jar 4.3.8
hibernate-core.jar 4.3.8
hibernate-entitymanager.jar 4.3.8 final
hibernate-validator.jar 5.1.3 final
hibernate-jpa-2.1-api.jar 1.0.0 final
c3p0.jar 0.9.2.1 

Информация JPA:

<persistence-unit name="TestPU" transaction-type="RESOURCE_LOCAL">      
<properties>
<property name="hibernate.connection.url" value="jdbc:log4jdbc:sqlserver://127.0.0.1:1433;database=JPADB;" />
<property name="hibernate.connection.driver_class" value="net.sf.log4jdbc.DriverSpy" />
<property name="hibernate.dialect" value="com.companyname.kernel.persistence.jpa.UnicodeSQLServerDialect" />
<property name="hibernate.connection.autocommit" value="true" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.hbm2ddl.auto" value="update" />


<!-- use c3p0 connection pool -->
<property name="hibernate.c3p0.min_size" value="3" />
<property name="hibernate.c3p0.max_size" value="100" />
<property name="hibernate.c3p0.timeout" value="1800" />
<property name="hibernate.c3p0.max_statements" value="0" />  
</properties>

Код из диалекта:

registerColumnType( Types.VARBINARY, "image" );
    registerColumnType( Types.VARBINARY, 8000, "varbinary($l)" );
    registerColumnType( Types.LONGVARBINARY, "image" );
    registerColumnType( Types.LONGVARCHAR, "text" );
    registerColumnType( Types.BOOLEAN, "bit" );

Новое открытие: я использовал eclipse со своего ноутбука для подключения к серверу базы данных, и это сработало, но когда Дженкинс пытается это сделать, выдает ошибку выше.

Я не мог найти ничего плохого в этом, но я очень надеюсь, что один из вас найдет время, чтобы помочь мне. Любые указатели приветствуются.


person Florenze    schedule 16.02.2015    source источник
comment
Кроме того, я использую jenkins для запуска теста. Когда я пытаюсь запустить тест локально, они работают. Я попытался скопировать мою локальную схему БД в другую БД, без костей. Это вызвало еще больше вопросов.   -  person Florenze    schedule 16.02.2015


Ответы (1)


Я бросил мяч на этом... Похоже, я не перекомпилировал свои модули базы данных после того, как поменял библиотеки.

Выполнение этого немедленно исправило мою проблему

person Florenze    schedule 17.02.2015