Hibernate 在JPA和Spring中,可以动态创建持久化单元吗?

Hibernate 在JPA和Spring中,可以动态创建持久化单元吗?,hibernate,spring,jpa,Hibernate,Spring,Jpa,显然,我们需要动态创建持久性单元。基本上,我们有这个web服务和一组具有相同域类的相同模式。我们希望能够将查询传递给上下文路径与模式匹配的web服务。第一次查询服务时,会传入该模式名称并动态创建持久化单元,然后在此后每次使用它,并在每次请求尚未创建的模式时重复该过程 这是否可能使用Spring和JPA,因为在正常PU创建启动时必须完成所有的构建?这个绝妙的想法是可伸缩的吗?因此,如果您的数据库模式是预定义的,我不太明白您为什么要“动态”创建持久化单元 唯一的一个例子是,如果模式的数量相当大,并且

显然,我们需要动态创建持久性单元。基本上,我们有这个web服务和一组具有相同域类的相同模式。我们希望能够将查询传递给上下文路径与模式匹配的web服务。第一次查询服务时,会传入该模式名称并动态创建持久化单元,然后在此后每次使用它,并在每次请求尚未创建的模式时重复该过程


这是否可能使用Spring和JPA,因为在正常PU创建启动时必须完成所有的构建?这个绝妙的想法是可伸缩的吗?

因此,如果您的数据库模式是预定义的,我不太明白您为什么要“动态”创建持久化单元

唯一的一个例子是,如果模式的数量相当大,并且您不希望所有模式在您的服务生命周期中都是必需的,那么我可以想到可能有意义的地方。即使这样,你所节省的只是一些内存


因此,除非我在这里遗漏了什么(如果我遗漏了,请澄清您希望通过“动态”创建持久性单元来实现什么),否则我建议您预先定义所有持久性单元。然后,您可以通过将持久化单元名称指定为参数来创建或注入适当的EntityManagerFactory实例。

所谓“架构”是指“数据库架构”?你是在运行时创建的还是预定义的?啊,我们又见面了lol--预定义的基本上是由不同的进程创建的不是我的好主意,但显然我们不想在persistence.xml文件中写入所有必要的PUs,但我试着说服我们只需要在xml文件中写入PUs,然后写下其他EntityManagerFactoryBeans。因此,当添加一个新的客户机时,将创建一个新的模式,然后使用我们的审计Web服务来查询时态表,这些时态表将是只读的、不可变的域对象。因此,我认为我们应该使用二级缓存——您觉得如何将Memcached与Hibernate集成在一起?不想在persistence.xml中复制所有代码是完全可以理解的,但没有任何东西可以阻止您使用XSLT。关键是在构建时比在运行时容易得多。就memcached而言,我从未在生产中部署过它(在集群中使用ehcache和jboss缓存),但它有一个(第三方)Hibernate()提供程序;没有理由认为它不应该工作。另外,如果我添加了一个新的模式,那么在不重新启动服务器的情况下,是否可以在增量添加新的PUs时加载它们?我认为这是最主要的问题,不必关闭服务器来添加新的PU,这样客户端就可以查询表了。啊。。。这将是相当有问题的。使用原始Hibernate,您可以构建一个全新的sessionFactory并替换现有的sessionFactory。对于JPA,您正在考虑编写自己的
PersistenceProvider
来实现这一点。虽然响应很晚,但对于多租户应用程序来说,这是绝对有效的要求,其中每个租户将其数据存储在具有相同架构的单独数据库中,并且可以在不重新启动webapp的情况下动态添加这些租户数据库。