我有一个J2SE程序,我正在使用JPA。现有的程序可以处理1到4个数据库。它所谈到的数据库依赖于特定于部署的表映射 - >数据库。当使用多个数据库时,这是因为某些表已转移到另一个数据库(数据库级别的水平分片,而不是表级别)。这是基于每个部署配置的 - 由用户决定他们希望如何构建他们的数据库设置。
现有代码如
Connection con = getConnectionBasedOnTable(domainObject.getClass());
// execute statement, etc...
使用(J2SE)JPA我想使用类似的东西:
EntityManager em = getEntityManagerBasedOnTable(domainObject.getClass());
// persist, etc...
间接的原因是因为不同的用户有不同的要求。小用户可能只有一个小型数据库,因此单个服务器就足够了。大型组织可能拥有庞大的数据库,因此我们通过在高性能服务器上放置高性能表来解决这个问题,等等。某些用户还使用它将敏感数据保存在(昂贵的)高安全性环境中,同时将非敏感数据保存在(廉价)中等安全环境中。所以没有一种尺寸适合所有数据库方法。因此间接。另请注意,符合分离条件的表没有任何外键约束问题。
既然我正在尝试迁移到JPA,我怎样才能允许最终用户定义他们的数据库结构?有没有办法以编程方式配置持久性单元?包括定义未在persistence.xml中指定的新持久性单元?我怎样才能实现目标?
我能想到以下几点:
对于它的价值,我们正在使用Hibernate的JPA实现。我已经找到了一种配置Hibernate JPA的方法,但没有取得任何成功。
答案 0 :(得分:3)
我正在结束这个问题,因为没有合适的答案。对于那些感兴趣的人,我最终选择在XML文件中预定义所有可能的持久性单元组合。
编辑:现在是2013年,我需要重新审视这个问题,事实证明可以做到这一点。请参阅Is persistence.xml requied when working with Spring and Hibernate? - 您不需要使用Spring,但使用HibernatePersistence.createContainerEntityManagerFactory()的一般要点是关键。
答案 1 :(得分:0)
不确定它会对你有所帮助,但你可以试着看看Teiid是否解决了你的问题。这样,您可以将所有数据源聚合到一个点(Teiid),使其对您的数据来源的应用程序透明。