Опитвам се да създам тестова среда за моята компания. Те са избрали да използват 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 от моя лаптоп, за да се свържа със сървъра на базата данни и той работи, но когато Дженкинс се опитва да го направи, дава грешка по-горе.
Не можах да намеря нищо нередно с тях, но се надявам някой от вас да отдели време да ми помогне. Всякакви насоки са добре дошли.