2011-08-31 7 views
10

Me parece como support for multi tenancy has been added to hibernate durante casi seis meses y updated at least once since.¿Cómo habilitar multi-tenancy en Hibernate 4 con JPA?

Parece bastante trivial para obtener una Sesión de múltiples usuarios fuera de la APP:

Session session = sessionFactory.withOptions().tenantIdentifier("jboss").openSession(); 

Pero, ¿cómo habría que habilitarlo en una aplicación que utiliza hibernación a través de la APP? (Si es posible).

Gracias de antemano.

+1

sus dos enlaces no están funcionando. será genial si los vuelves a agregar? –

Respuesta

7

Se puede configurar a través de propiedades en persistence.xml de la siguiente manera:

<property name="hibernate.multiTenancy" value="DATABASE"/> 
<property name="hibernate.multi_tenant_connection_provider" value="com.example.MyConnectionProvider" /> 
<property name="hibernate.tenant_identifier_resolver" value="com.example.MyTenantIdResolver" /> 

Si utiliza esquema como estrategia de multi-alquiler hibernate.multi_tenant_connection_provider no es necesario.

También puede establecer estas propiedades en su código y pasarlas en un mapa al Persistence.createEntityManagerFactory(). En este caso, puede pasar una instancia de objeto, no solo un nombre de clase.

Más información en Hibernate documentation.

5

EntityManager.getDelegate() devolverá subyacente SessionImpl.

+0

que no está disponible para un campo de sesión aunque – Bozho

+1

'SessionImpl tmpsession = (SessionImpl) entityManager.getDelegate(); SessionFactory sessionFactory = tmpsession.getSessionFactory(); Session session = sessionFactory.withOptions(). TenantIdentifier ("jboss") .openSession(); ' – bpgergo

+0

hm, a la derecha. Olvidé sobre eso – Bozho