通常,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可以处理这些事情,他们称之为动态模型。可以使用键和值设置和访问它们。但是,尽管您可以使用名称访问数据,但所有文档都要求在hbm.xml文件中定义列名。这意味着我必须定义Column1,Column2,Column3,而我在运行时之前根本无法知道。对我来说似乎很直观,使用Map,您可以在键/值下加载所有数据,其中所有键都将由该特定表的列表示,这样您就可以简单地遍历所有键,但Hibernate似乎没有支持它。
我碰巧看到了this的问题,虽然与我的情况类似,但与该问题的OP不同,我不知道此表中列的名称。
我正在使用最近的hibernate 4.2。有没有人知道这样的事情是否可能,或者是否有另一种方式(最好不必更改数据库)?非常感谢!