0

好的,问题是我有一个对不同数据库进行查询的应用程序,并且一些实体缺少列。有没有办法在不使用继承的情况下忽略丢失的列?

4

1 回答 1

8

根据您的需要有不同的可能性:

  1. 如果您从不需要这些仅存在于某些数据库中的额外列,那么您只需不在映射(或注释)中定义它们。然后它们永远不会被 Hibernate 读取,并且在插入时将列设置为 null(如果您想要不同于 null 的值,您可以在数据库中定义默认值或触发器)。

  2. 如果您需要额外的列(当它们存在时),那么您需要为不同的数据库进行不同的映射。对于这种情况,最好使用 xml 映射文件。无论如何,每个数据库都有一个单独的 hibernate.cfg.xml(连接字符串在那里)。在此处为具有不同列的表指定不同的映射文件(标签<mapping resource="..." />)。Java pojo,即Java 类,对于所有数据库都是相同的,它包含存在于任何数据库中的所有列,但是在特定于数据库的映射文件中,您只将这些列映射到该数据库中真正存在的Java 成员。(使用注释这很烦人,因为您需要为不同的数据库使用不同的 Java 类,并且您必须处理代码中的逻辑。)

  3. 如果表是只读的,那么您可以在该表上定义一个数据库视图,并让该视图为缺少的列提供默认值。然后在 Hibernate 中映射视图而不是表。

于 2013-03-08T09:57:50.557 回答