3

我有一个有很多表的网络应用程序(每个表代表一个 POJO)。我为每个类编写了映射文件,然后使用 HibernateSchemaExport在我的数据库中生成表。现在我想为每个已创建的现有表创建 2 个附加表:

  • 用户权限表- 存储用户对 POJO 的权限,特定于每个字段
    ,每一列代表 POJO 中的一个字段,每一行代表一个用户,每个单元格将有一个值“读取”、“写入”等,代表用户对 POJO 的权限场地

  • 数据历史表- 使用版本号存储所有数据历史记录,
    该表将包含 POJO 表具有的所有列,并带有 4 个附加字段:数据对象版本、事务 GUID(主键)、数据戳和执行此事务的用户。

我希望能够在创建这些表后通过 Hibernate 访问它们。这样我就可以轻松地在其中添加/删除/更新条目。


我的问题

附加表上的大多数列将与 POJO 表相同。所以我认为以某种方式引用 POJO 表而不是创建全新的表可能会更好。这样,如果 POJO 表中添加了新字段,这些表将自动进行更改。但我似乎不知道该怎么做。我想也许有一些方法:

  • 创建以某种方式引用 POJO 表的休眠映射文件,
    例如在我的新 POJOPermission.hbm.xml 文件中,以某种方式指定,使用与 POJO 表相同的字段,并添加这些新字段。
  • 编写 Java 代码以在 Hibernate 中创建表,
    例如我可以使用 java.lang.Class 返回 POJO 中所有字段的列表,然后遍历这些字段,以某种方式将它们设置为我的新表的列标题,并以某种方式调用Hibernate 在运行时创建这些表

有人可以告诉我如何执行上述任一操作,或者解决此问题吗?我有一种感觉,我可能以错误的方式思考这个问题......

谢谢!!!

[编辑 - 解决方案]

我最终使用 XSLT 将原始 hbm.xml 文件转换为新文件,更改字段类型等。并指定 hibernate.cfg.xml 文件以包含新生成的文件。最后只需运行 schemaexport 即可生成所有 java 文件...

4

3 回答 3

1

CREATE TABLE 语法是特定于实现的。DB2 有 CREATE TABLE LIKE ,但是您需要解析目录表以检索键,外国和国内,然后生成 ALTER TABLE... 来实现相同的。其他数据库可能也有类似的。

于 2009-03-04T04:58:27.243 回答
0

使用“select into”可以创建基本表结构的副本。它只复制列和数据类型,而不是约束或索引。如果您只想要没有数据的结构,只需指定一个不返回任何记录的 where 子句。

select * into targettable from sourcetable where 1=0
于 2009-03-04T05:18:57.240 回答
0

如果您想通过 Hibernate 访问用户权限和数据历史记录,那么我认为您需要通过考虑如何将这些表示为 POJO 来解决问题。然后,您可以生成映射以将它们存储在数据库中。

于 2009-03-04T14:16:57.633 回答