Я потратил дни и дни, пытаясь получить работающее соединение с базой данных для моих интеграционных тестов Spring / JPA (Hibernate), устраняя загадочные ошибки «Нет контекста базы данных», и, наконец, все заработало, но я не понимаю, почемуЯ должен был сделать то, что сделал.
Обратите внимание, как мои LocalContainerEntityManagerFacotryBean ссылаются на HibernateJpaVendorAdapter .
applicationContext.xml
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="myEMF">
<property name="persistenceXmlLocation" value="file:src/test/resources/META-INF/persistence.xml" />
<property name="persistenceUnitName" value="myPU" />
<property name="jpaVendorAdapter" ref="hibernateJpaAdapter" />
</bean>
<bean id="hibernateJpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
</bean>
Почему я должен был использовать этот HibernateJpaVendorAdapter , когда мой модуль персистентности уже настроен для Hibernate, как показано ниже?
persistence.xml
<persistence-unit name="myPU" transaction-type="RESOURCE_LOCAL">
<class>com.blah.blah.Class1</class>
<class>com.blah.blah.Class2</class>
<class>com.blah.blah.Class3</class>
<properties>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1?zeroDateTimeBehavior=convertToNull"/>
<property name="hibernate.connection.username" value="uname"/>
<property name="hibernate.connection.password" value="pwd"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.ejb.event.post-insert"
value="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-update"
value="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-delete"
value="org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.pre-collection-update"
value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.pre-collection-remove"
value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-collection-recreate"
value="org.hibernate.envers.event.AuditEventListener" />
</properties>
</persistence-unit>
Кажется, чторабота, но я делаю это правильно?Мог ли я сделать это другим / лучшим способом?