Tag: multi tenant

多用户数据源 – Spring + Hibernate

我正在编写一个支持多个用户的Web应用程序。 每个用户都有自己的数据库 – 使用H2。 所有数据库模式都是相同的。 我希望将Spring + Hibernate用于此应用程序。 所以我坚持如何将用户的数据库与该用户关联 – 可能在HTTPSession中关联它,并扩展spring的AbstractRoutingDataSource? 但这不会影响Hibernate的缓存吗? 另一种方法是使用每个数据源的SessionFactory,即使每个数据源的模式都相同……所以我认为这是一种浪费。 无论如何选择数据源需要是动态的 – 它们不能在上下文文件中预先配置,因为每个新用户都将创建自己的数据库。 有没有现有的框架/解决方案? 我不太了解Hibernate Shards,也许这有用吗?

使用Spring JPA的多租户

我正在寻找一个针对我的Web应用程序的多租户解决方案。 我想用Separate Schema Model实现一个应用程序。 我想每个会话都有一个数据源。 为了做到这一点,我把datasource和entitymanger放在会话范围内,但那不起作用。 我想在用户输入用户名和密码以及tenantId时加载data-access-context.xml(包括数据源和其他存储库bean)文件。 我想知道它是否是一个很好的解决方案?

如何在eclipselink中访问多个租户?

eclipselink(或Hibernate)中的租户是将数据域彼此分开的一个很好的概念。 我正在使用eclipselink和单表策略。 有时需要从多个租户访问数据(例如,出于管理目的)。 有没有一个很好的方法来实现这一目标? (我不想通过所有租户来收集数据……) 例: @Entity @Multitenant @TenantDiscriminatorColumn(name = “TENANT”, contextProperty = “tenant.id”) public class TenantEntity { … 我可以使用参数化实体管理器访问特定租户中的对象: private static EntityManager newEntityManager(String tenant) { Map map = new HashMap(); map.put(“tenant.id”, tenant); return emf.createEntityManager(map); } 有没有方便的方法来查询所有租户? (或者是仅在单个租户中定义的持久对象的标识?)

Hibernate多租户在运行时创建模式

我正在使用hibernate 4和spring 4为java Web应用程序设置多租户支持。在应用程序启动时创建并设置默认架构。 不尝试支持多租户时,此架构工作正常。 我现在需要做的是为每个创建帐户的新租户创建一个架构。 此架构可以只是通用架构的副本,因为它将遵循相同的格式。 如何在运行时创建与默认模式相同格式的新模式? 似乎在实例化LocalSessionFactoryBean时创建了默认模式,因为我指定了映射资源。

Spring + Hibernate的多租户:“SessionFactory配置为多租户,但没有指定租户标识符”

在Spring 3应用程序中,我试图通过Hibernate 4的本机MultiTenantConnectionProvider和CurrentTenantIdentifierResolver实现多租户。 我看到在Hibernate 4.1.3中存在这个问题 ,但是我运行4.1.9并且仍然得到类似的exception: Caused by: org.hibernate.HibernateException: SessionFactory configured for multi-tenancy, but no tenant identifier specified at org.hibernate.internal.AbstractSessionImpl.(AbstractSessionImpl.java:84) at org.hibernate.internal.SessionImpl.(SessionImpl.java:239) at org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1597) at org.hibernate.internal.SessionFactoryImpl.openSession(SessionFactoryImpl.java:963) at org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:328) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:334) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631) at com.afflatus.edu.thoth.repository.UserRepository$$EnhancerByCGLIB$$c844ce96.getAllUsers() at com.afflatus.edu.thoth.service.UserService.getAllUsers(UserService.java:29) at com.afflatus.edu.thoth.HomeController.hello(HomeController.java:37) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) […]