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

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

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

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

有任何想法吗?

我想你可以做这样的事情。 没试过,它只是一个疯狂的猜测 。 但那是通常的做法 – 我遵循命名查询; 是的,这完全是另一回事。

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

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

将post

我试过你的解决方案。 它没有用,它说:注释属性Table.name的值必须是常量表达式。

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

如果您只想引用/读取表名,可以使用下面的代码。 如果你想改变,帕斯卡尔说,这是不可能的。

 @Entity @Table(name = Database.tableName) public class Database implements Serializable { public static final String tableName = "TABLE_1";//this variable you can reference in other portions of your code. Of course you cannot change it. ............... } 

在运行时指定表名是不可能的,这根本不是JPA的工作原理(我仍然不确定你的要求)。 在您的表集上映射不同的实体并运行各种查询或动态构建它们(可能使用Criteria API),具体取决于客户端的输入使用除JPA之外的其他内容(如iBATIS)。

如果要从不同的表中选择数据,

然后你可以使用:

@Subselect("")

代替 :

@Table(name = "tableName")