Динамический диалект с Hibernate и Hikari ⇐ JAVA
-
Anonymous
Динамический диалект с Hibernate и Hikari
Я новичок в Hibernate. В моем коде соединение с БД управляется с помощью источника данных Hikari.
Мой код сейчас является мультитенантным, но он управляет одним и тем же диалектом спящего режима для всех арендаторов.
Можно ли создать конфигурацию, в которой каждый арендатор сможет использовать свой диалект? Тип диалекта может быть предоставлен в собственность арендатора.
Это примерentityManagerFactory:
@Bean public LocalContainerEntityManagerFactoryBeanentityManagerFactory() { Map jpaProperties = new HashMap(); jpaProperties.put(..., ...); jpaProperties.put(org.hibernate.cfg.Environment.DIALECT, "myDialect"); LocalContainerEntityManagerFactoryBean emfBean = новый LocalContainerEntityManagerFactoryBean (); emfBean.setPackagesToScan(new String[] {MyEntity.class.getPackage().getName()}); emfBean.setJpaVendorAdapter(новый HibernateJpaVendorAdapter()); emfBean.setJpaPropertyMap(jpaProperties); вернуть emfBean; } Изменить
Я искал это решение: оно предлагает создать дубликат LocalContainerEntityManagerFactoryBean для каждого диалекта. Чего я не понимаю, так это как я могу определить, когда используется один EntityManager (MySQL), а когда другой (Postgres или MsSQL): решение различает объекты (каждый объект имеет свою собственную БД), но в моем случае все объекты включены все БД. Является ли арендатор дискриминирующим?
Например: если я создаю второй экземпляр LocalContainerEntityManagerFactoryBean (т. е. msSQLEntityManagerFactory()) с установленным диалектом для SQL Server, приложение не запускается с:
Приложение не удалось запустить из-за исключения org.springframework.beans.factory.NoUniqueBeanDefinitionException: Нет подходящего bean-компонента типа javax.persistence.EntityManagerFactory: ожидался один соответствующий bean-компонент, но найдено 2: msSQLEntityManagerFactory,entityManagerFactory
Я новичок в Hibernate. В моем коде соединение с БД управляется с помощью источника данных Hikari.
Мой код сейчас является мультитенантным, но он управляет одним и тем же диалектом спящего режима для всех арендаторов.
Можно ли создать конфигурацию, в которой каждый арендатор сможет использовать свой диалект? Тип диалекта может быть предоставлен в собственность арендатора.
Это примерentityManagerFactory:
@Bean public LocalContainerEntityManagerFactoryBeanentityManagerFactory() { Map jpaProperties = new HashMap(); jpaProperties.put(..., ...); jpaProperties.put(org.hibernate.cfg.Environment.DIALECT, "myDialect"); LocalContainerEntityManagerFactoryBean emfBean = новый LocalContainerEntityManagerFactoryBean (); emfBean.setPackagesToScan(new String[] {MyEntity.class.getPackage().getName()}); emfBean.setJpaVendorAdapter(новый HibernateJpaVendorAdapter()); emfBean.setJpaPropertyMap(jpaProperties); вернуть emfBean; } Изменить
Я искал это решение: оно предлагает создать дубликат LocalContainerEntityManagerFactoryBean для каждого диалекта. Чего я не понимаю, так это как я могу определить, когда используется один EntityManager (MySQL), а когда другой (Postgres или MsSQL): решение различает объекты (каждый объект имеет свою собственную БД), но в моем случае все объекты включены все БД. Является ли арендатор дискриминирующим?
Например: если я создаю второй экземпляр LocalContainerEntityManagerFactoryBean (т. е. msSQLEntityManagerFactory()) с установленным диалектом для SQL Server, приложение не запускается с:
Приложение не удалось запустить из-за исключения org.springframework.beans.factory.NoUniqueBeanDefinitionException: Нет подходящего bean-компонента типа javax.persistence.EntityManagerFactory: ожидался один соответствующий bean-компонент, но найдено 2: msSQLEntityManagerFactory,entityManagerFactory
Мобильная версия