我正在尝试让我的Web应用程序为每个用户使用一个( MySQL )架构。 我正在使用 Spring 和 JPA 以及 Hibernate 。 Hibernate Multi-tenancy概念是否相关? 我试图这样做的方式是
EntityManagerFactory
和HTTPSession
我已经想出了如何做(b),但我仍然有问题(a)。
我尝试了@Scope(WebApplicationContext.SCOPE_SESSION)
,但全球EntityManagerFactory
?
任何帮助?
答案 0 :(得分:0)
您可以实现自己的ConnectionProvider并进行额外设置。 但是,如果您想为每个用户执行一个模式,我认为您的应用程序架构存在很大问题。
<强> UPD1 强>
如果你使用弹簧。您可以尝试在会话范围中声明具有自己的ConnectionProvider imp的bean。
但是有一个大问题。 Hibernate制作ConnectionProvider。这意味着您必须使用自己的ServiceRegistry(通过Spring工作)并覆盖StandardServiceRegistryBuilder,并使用EntityManagerFactoryBuilder(基于EntityManagerFactoryBuilderImpl,但使用您的StandardServiceRegistryBuilder)。
创建新会话后,它将使用ConnectionProvider创建连接(可能您必须覆盖某些类)。
答案 1 :(得分:0)
这是真的没有建议..这会伤害你以后,你不能为不同的用户做不同的架构。您始终可以为连接创建自己的属性..
Configuration cfg = new Configuration();
cfg.configure();
System.setProperty("hibernate.connection.password",pass);
System.setProperty("hibernate.connection.username",usr);
System.setProperty("hibernate.connection.driver_class", driver_class);
System.setProperty("hibernate.connection.url", driver_url);
System.setProperty("hibernate.dialect", dialect);
// etc, etc, for all properties
cfg.setProperties(System.getProperties());
sessionFactory = cfg.buildSessionFactory();
它可能是那样的......但这是错误的!