我的数据库中有许多表具有完全相同的结构:相同的列名称和类型。 这些表之间的唯一区别是它们的名称(我只能在运行时知道)。
我想创建一个类到表的映射,但只在运行时给出表的名称(没有静态@Table
注释)。
有可能吗? 有没有其他方法可以实现我的目标?
答案 0 :(得分:1)
直接 - 没有。因为这不是一个常规的用例。通常,您不应该使用动态生成的表。将一些记录移动到存档表(或多个表)时,它是一种有效的用法,但除此之外要避免使用它。
无论如何,您可以做到这一点:进行本机查询,并将结果映射到非实体对象。您将能够从任何表中进行选择并将结果转换为对象。但是,您无法以这种方式插入或更新。
答案 1 :(得分:0)
不要认为可以动态地关联或更改映射到实体的表。
你可以检查@MappedSuperClass,它允许你定义一个类中的所有字段并继承它们,这样就没有重复,实体是带有映射的空类。
http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#d0e1168
如果您动态了解表名,则可以始终相应地实例化映射的类。