首先,我需要说我不是 Hibernate 方面的专家。我只在其他项目中使用了它的基础知识。但是现在,我想在遗留数据库方案上使用 Hibernate,但是在将表映射到 Java 域模型时遇到了一些困难:
1)许多表都有一个由用户分配的主键(作为字符串)。所以它们不是根据某种算法生成的。它们实际上是 Hibernate 所说的“自然”键。有没有办法告诉 Hibernate 接受用户分配的 ID?
2) 第二个问题是很多表都有一些共同的属性,例如:valid_from、valid_to、date_created、date_last_modified、user_last_modified 和 user_created。这些属性用于审核(哪个记录由哪个用户更改)并在“valid_to”日期字段为过去时禁用记录。我不想将这些字段公开给最终用户,因为它们似乎是“元数据”,但我必须找到一种方法来更新这些字段。Hibernate 中是否有一个通用的解决方案,每当记录发生更改时,我可以使用它来更新这些字段?作为信息,这些字段也用于“链接表”,用于管理 2 个表之间的多对多关系。
非常感谢所有帮助!
更新:我将使用 AbstractEntity 来保存公共属性并使用 EventListener 插入/更新这些字段。UserContext.getCurrentUser() 将检索用户(用户将使用 ThreadLocal 绑定到当前线程)。
现在唯一的问题是如何处理那些“关联”表......它们还包含那些公共字段,我不想创建一个单独的类来映射这样的关联表。在我看来,Hibernate 在隐藏这样的链接表方面做得很好。我有办法用 EventListener 更新这样的链接表吗?
例如:如果表 A 通过链接表 A_B 与类 B 具有多对多关系,是否有办法在 A 或 B 上插入/更新记录时更新 A_B?