@Entity
@Table(name = Database.tableName)
public class Database implements Serializable {
public static final String tableName = "TABLE_1";
...............
}
但我不明白为什么有人会这么做。你能告诉我们你在做什么吗?为什么你有几个表完全相同的定义? [编辑]** 我试过你的解决办法了。它没有工作,它说:注解属性的值www. example www.example.com 必须是常量表达式。 这还不够清楚吗我是说你不能这么做。我相信这是很合乎逻辑的。如果你想让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.
...............
}
6条答案
按热度按时间tzxcd3kk1#
你可以做这样的事情,如果这是你的关注,我想。从来没有尝试过,这只是一个疯狂的猜测。但这是通常的做法--我遵循命名查询;是的,那完全是另一回事。
但我不明白为什么有人会这么做。你能告诉我们你在做什么吗?为什么你有几个表完全相同的定义?
[编辑]**
我试过你的解决办法了。它没有工作,它说:注解属性的值www. example www.example.com 必须是常量表达式。
这还不够清楚吗我是说你不能这么做。我相信这是很合乎逻辑的。如果你想让Hibernate生成你的模式,那么你可以在模式中定义所有你想要的实体,并使用适当的关系。
wbrvyc0a2#
在运行时指定表名是不可能的,这根本不是JPA的工作方式(我仍然不确定是否能得到您的要求)。或者Map表集上的不同实体并运行各种查询,或者根据客户端的输入动态构建它们(可能使用Criteria API)或者使用JPA以外的东西(比如iBATIS)。
omjgkv6w3#
如果你只想引用/读取表名,可以像下面的代码一样。如果你想改变,就像帕斯卡说的那样,这是不可能的。
cmssoen24#
我有个变通办法。
使用javax。坚持不懈EntityManager和String。格式来做到这一点。
调用代码如下:
而且效果很好。
但是你应该检查传入的参数。
nxowjjhe5#
如果要从不同的表中选择数据,
然后你可以用途:
@Subselect("")
而不是:
@Table(name = "tableName")
。n3schb8v6#
我们可以利用接口常量并在annotation处初始化
这是可能的,因为所有接口变量默认都是常量。