2012-06-05 2 views
3

У меня есть проект Spring с использованием Hibernate с двумя источниками данных (db2 и sql-server).Hibernate не может создать экземпляр генератора id в проекте Spring с несколькими источниками данных

Как только я добавляю

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SOME_SEQ")

в поле столбца в моем классе сущности, я получаю BeanCreationException при создании SQL-сервера EntityManagerFactory потому что org.hibernate.dialect.SQLServerDialect не поддерживает последовательности. Единственное место, где этот объект используется, однако, находится в DAO, который использует db2 EntityManagerFactory, который использует соответствующий диалект.

Что мне не хватает?

+1

Сколько гибернатных 'SessionFactories' у вас есть в вашей конфигурации Spring? – atrain

+0

У меня нет явного определения – Derek

+1

вам удалось решить эту проблему? Я сталкиваюсь с тем же :( –

ответ

5

Попробуйте с GenerationType=AUTO вместо GenerationType=SEQUENCE.

@GeneratedValue(strategy = GenerationType.AUTO, generator = "SOME_SEQ") 

С AUTO спящего режимом использует оптимальную стратегию фитинга поколения, которая последовательность для некоторых баз данных и Autoincrement для других.

(NB:... Я никогда не использую аннотации, но я использую отображение файлы Там <generator class="native"> хорошо работает для различных типов база данных GenerationType=AUTO должна быть одинаковой для аннотаций)

+1

Хорошее предложение - не меняет поведения, хотя – Derek

0

Даже я столкнулся с таким же вопросом и решить ее путем добавления следующий параметр конфигурации JPA сохранение блока

<exclude-unlisted-classes>true</exclude-unlisted-classes> 

Эта опция заставляет поставщик JPA только сканировать перечисленные классы вместо всего окружающей баночки и т.д.

Итак, теперь это выглядит так:

<persistence-unit name="MSSQLBackedPersistenceUnit" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:/jdbc/MSSQLServerDS</jta-data-source> 

    <class>com.example.app.domain.MyEntity</class> 
    <exclude-unlisted-classes>true</exclude-unlisted-classes> 

    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect" /> 
     <property name="hibernate.show_sql" value="true" /> 
    </properties> 
</persistence-unit> 
Смежные вопросы