在@Table(name = “tableName”) - 使“tableName”成为JPA中的变量

2022-09-03 02:11:44

我正在使用JPA,我需要使“tableName”成为一个变量。

在数据库中,我有很多表,我的代码需要访问我指定它读取的表。

@Entity
@Table(name = "tableName")
public class Database implements Serializable {...............}

有什么想法吗?


答案 1

你可以做这样的事情,如果这是你关心的问题,我猜。从来没有尝试过,它只是一个疯狂的猜测。但这是通常的做法 - 我遵循命名查询;是的,这完全是另一回事。

@Entity
@Table(name = Database.tableName)
public class Database implements Serializable {
    public static final String tableName = "TABLE_1";
    ...............
}

但我不明白为什么有人会这样做。你能告诉我们你在做什么吗?为什么您有几个完全相同定义的表?

[编辑]

我尝试了您的解决方案。它不起作用,它说:注释属性 Table.name 的值必须是常量表达式。

那么,这还不够清楚吗?我的意思是你不能那样做。我认为这是非常合乎逻辑的。如果您希望Hibernate生成架构,则可以在架构中定义所需的所有实体,并使用适当的关系。


答案 2

在运行时指定表名是不可能的,这根本不是JPA的工作方式(我仍然不确定是否满足您的要求)。要么映射表集上的不同实体并运行各种查询,要么根据客户端的输入动态构建它们(可能使用标准API),或者使用JPA以外的其他内容(如iBATIS)。


推荐