首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在hibernate/spring中的多个模式之间划分数据

在hibernate/spring中的多个模式之间划分数据
EN

Stack Overflow用户
提问于 2014-07-11 14:25:18
回答 1查看 539关注 0票数 3

我们的应用程序区分了特定“用户”(实际上是一个法律实体,但为简单起见,我们称其为用户)的数据和所有用户之间共享的数据。要求每个用户的用户数据保存在单独的架构中。因此,在所有用户都可以访问的模式中存在公共和共享的数据,以及许多模式,其中每个模式只能由与其相关的用户访问。这些用户模式每个都包含相同的一组表,因此在公共模式中可能有类似USERA.ACCOUNT、USERB.ACCOUNT (等等)和SHARED.PRODUCT的内容。我们已经实现了这一点,并通过为表示公共数据的实体类型指定@Table(schema=“共享”),很好地满足了需求。我们没有在"user“实体类型上指定模式--要查找的模式的选择由DAO决定。我们为每个用户配置一个DAO,每个DAO都配置为使用适当的用户模式,并根据与任何给定操作相关联的用户“上下文”进行选择。

到目前为止还不错-但是共享模式的名称现在被硬编码到共享数据类型的实体类文件中。因为它在注释中,所以它被编译成它们。这对我们没有好处,因为通常在客户端站点上部署时,我们发现客户端DBA希望指定模式名称,但我们不希望为了实现这一点而必须重新编译。更糟糕的是,在客户端,我们通常会有多个系统用于不同的目的,具有不同的模式名称(PROD、UAT等),而使用同一系统的多个重新编译的副本来实现这一点将是疯狂的。

我还没有找到覆盖注释中定义的模式的方法。有没有人知道实现这一点的方法?我曾尝试将我们的系统从直接使用hibernate (SessionFactory等)移植到JPA (EntityManagers等),因为这在原则上允许注释中的模式属性被ORM.xml中的条目覆盖,但是使用JPA/JTA/Spring似乎存在很多问题,事务生命周期中的操作(如刷新)不再像您预期的那样发生,所以我放弃了它。

任何建议都是非常受欢迎的。

EN

回答 1

Stack Overflow用户

发布于 2015-03-13 08:57:28

你有几个选择..你可以使用动态路由(查看spring文档,但也有很多关于stackoverflow的文章)。这是最适合您的解决方案的。基本上,您已经配置了几个连接,并且基于一些标准,spring会根据一些标准将您的查询路由到一个或另一个连接(模式)。基本上相同的bean,根据需要由不同的模式获取。

其他选择是让多个bean具有相同的结构,每个bean在应用程序上下文中配置不同的实体管理器和事务管理器,但实际上,这更适合与您不同的情况。

坦率地说,第一个解决方案我认为它足够简单,并且最适合您的需求。请查看此链接作为示例或查看spring文档,它当时对我很有帮助。tutorial

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24691317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档