Я пытался использовать hibernate4 с Spring 3.2 и обернуть его в JPA.
В итоге я создал свой собственный класс .... скопировал все содержимое org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter в свой собственный файл класса и изменил вывод одной подпрограммы, чтобы изменить MySQL Dialect на MySQL5InnoDBDialect , Думаю, я мог бы расширить класс.
В любом случае ...
Изменено как:
package com.imk.dao.hibernate;
public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter {
[ snip snip snip --- use the original code ]
protected Class determineDatabaseDialectClass(Database database) {
switch (database) {
case DB2:
return DB2Dialect.class;
case DERBY:
return DerbyDialect.class;
case H2:
return H2Dialect.class;
case HSQL:
return HSQLDialect.class;
case INFORMIX:
return InformixDialect.class;
case MYSQL:
return MySQL5InnoDBDialect.class;
case ORACLE:
return Oracle9iDialect.class;
case POSTGRESQL:
return PostgreSQLDialect.class;
case SQL_SERVER:
return SQLServerDialect.class;
case SYBASE:
return SybaseDialect.class;
default:
return null;
}
}
}
Вы можете подумать, что это «взлом», но, полагаю, это сработает. В конфигурацию контекста Spring я добавил:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="MosJPA" />
<property name="jpaVendorAdapter">
<bean class="com.imk.dao.hibernate.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
</bean>
</property>
</bean>
Тогда мой класс используется для bean-компонента адаптера базы данных. (нет сканирования компонентов, мои классы перечислены в META-INF / persistence.xml (расположение по умолчанию))