在JPA中提供@Table name运行时



我有每个客户端的表,例如,我们有一个通用表名称ABC_ACCOUNTS,我们也有每个客户端的变体。对于客户端PQR,我们有一个表PQR_ACCOUNTS对于客户端XYZ,我们有一个表XYZ_ACCOUNTS

我正在使用Spring Boot和JPA与Hibernate 5创建DB存储库和访问数据。我希望能够访问和修改基于请求参数'client_prefix'的数据。

我累了使用PhysicalNamingStrategy,但它似乎只改变了服务器启动时的表名,后来没有调用。这意味着我只能改变一个实体表,而且在启动时也是如此。

有什么方法可以通过在请求级别更改来实现吗?

我认为这是不可能的。您可以使用Hibernate的多租户特性来切换模式,但是切换表是不可能的。您必须为每个表创建一个实体。您可以使用包含该结构的基实体,并使用每个类一个表的继承策略。这样,客户表的映射就很简单:@Entity @Table(name = "XYZ_ACCOUNTS") public class XyzAccounts extends AbstractAccounts {}

相关内容

最新更新