]
Steve Ebersole commented on HHH-7312:
-------------------------------------
Well, as I pointed out on the pull request, the javadocs for
CurrentTenantIdentifierResolver even state its intended use. This is outside that use.
We could talk about re purposing CurrentTenantIdentifierResolver to be used in these other
cases as well. That would be a feature request, though, not a bug.
JPA using schema based multi tenancy / resolveCurrentTenantIdentifier
not called, cannot create entity manager
--------------------------------------------------------------------------------------------------------------
Key: HHH-7312
URL:
https://hibernate.onjira.com/browse/HHH-7312
Project: Hibernate ORM
Issue Type: Bug
Components: core
Affects Versions: 4.1.2
Environment: Hibernate 4.1.2, using JPA
Reporter: Oriel Maute
Priority: Minor
Labels: jpa2, multi, schema-based, tenancy
Attachments: persistence.xml, SchemaBasedMultiTenancyTest.java,
SchemaBasedMultiTenantConnectionProvider.java, SchemaBasedTenantResolver.java
Original Estimate: 1h
Remaining Estimate: 1h
I tried to use db schema based multi tenancy with hibernate jpa / entitymanager. I use
the following properties in persistence.xml:
<property name="hibernate.multiTenancy" value="SCHEMA"/>
<property name="hibernate.tenant_identifier_resolver"
value="com.xoricon.persistence.bo.multitenancy.test.SchemaBasedTenantResolver"/>
<property name="hibernate.multi_tenant_connection_provider"
value="com.xoricon.persistence.bo.multitenancy.test.SchemaBasedMultiTenantConnectionProvider"/>
Both instances (SchemaBasedTenantResolver / SchemaBasedMultiTenantConnectionProvider)
will be instantiated by hibernate.
When i call:
EntityManagerFactory lEntityManagerFactory=
Persistence.createEntityManagerFactory("orm1");
EntityManager lManager = lEntityManagerFactory.createEntityManager();
I get:
System.out: SchemaBasedMultiTenantConnectionProvider.getAnyConnection()
System.out: SchemaBasedTenantResolver.<init>()
E
Time: 1,53
There was 1 error:
1)
test1(com.xoricon.persistence.bo.multitenancy.test.SchemaBasedMultiTenancyTest)org.hibernate.HibernateException:
SessionFactory configured for multi-tenancy, but no tenant identifier specified
at org.hibernate.internal.AbstractSessionImpl.<init>(AbstractSessionImpl.java:82)
at org.hibernate.internal.SessionImpl.<init>(SessionImpl.java:231)
at
org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1831)
at org.hibernate.ejb.EntityManagerImpl.getRawSession(EntityManagerImpl.java:121)
at org.hibernate.ejb.EntityManagerImpl.getSession(EntityManagerImpl.java:98)
at
org.hibernate.ejb.AbstractEntityManagerImpl.setDefaultProperties(AbstractEntityManagerImpl.java:268)
at
org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:180)
at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:90)
at
org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:178)
at
org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:173)
at
com.xoricon.persistence.bo.multitenancy.test.SchemaBasedMultiTenancyTest.test1(SchemaBasedMultiTenancyTest.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at
com.xoricon.persistence.bo.multitenancy.test.SchemaBasedMultiTenancyTest.main(SchemaBasedMultiTenancyTest.java:51)
FAILURES!!!
Tests run: 1, Failures: 0, Errors: 1
In System.out "SchemaBasedTenantResolver.<init>()" shows, that my
CurrentTenantIdentifierResolver has been instantiated. But Hiberante did not call method
"public String resolveCurrentTenantIdentifier()".
I expect, that Hibernate uses the CurrentTenantIdentifierResolver to get the current
tenant id.
In JPA i cannot set the tenant on the Session, because the exception above occures before
Session has been created. I can access the Session only by EntityManager.getDelegate().
But as shown above, i cannot create an EntityManager instance.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: