通常,hibernate 使用 POJO 类和 JPA 来管理实体。如果您正在使用具有已知列的已知表名的数据库,则此方法可以正常工作。就我而言,我的数据库中有已知表和未知表。在已知表中,有些行具有未知表的名称,我可以在其中找到与该行的详细信息有关的特定数据。
我知道有一个与父行的 id 有关的外键,并且我知道该列的名称。我也知道有一个第二列,它与外键结合,为该行创建一个唯一标识符。
换句话说,假设我的表 PARENT 包含以下数据:
Id Table name ...
1 CHILD1
2 CHILD2
3 CHILD1
...
然后会有表 CHILD1 和 CHILD2(在读取表 PARENT 之前我不能假设它们存在),如下所示:
ParentId RowId Column1 Column2 Column3 ...
1 1 ... ... ...
1 2 ... ... ...
3 1 ... ... ...
请注意,虽然我知道列 ParentId 和 RowId 的存在,但我不知道 Column1、Column2、Column3 的名称。同样,如果我向您展示 CHILD2 表,将会有一个 ParentId 和一个 RowId,但我无法告诉您其他列的名称。
我看到 Hibernate 可以处理这些事情,他们称它们为动态模型。它们可以作为具有键和值的 Map 进行设置和访问。但是,尽管您可以使用名称访问数据,但所有文档都要求在 hbm.xml 文件中定义列名。这意味着我必须定义 Column1、Column2、Column3,而在运行之前我根本无法知道。对我来说,使用 Map 似乎很直观,您可以加载键/值下的所有数据,其中所有键将由该特定表的列表示,以便您可以简单地循环遍历所有键,但 Hibernate 似乎没有支持它。
我碰巧看到了这个问题,虽然与我的情况相似,但与该问题的 OP 不同,我不知道该表中列的名称。
我正在使用最近的休眠 4.2。有谁知道这样的事情是否可能,或者是否有另一种方法(最好不必更改数据库)?非常感谢!