在@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")
。