如果不存在,Hibernate忽略列

时间:2013-03-07 20:10:43

标签: java hibernate jpa

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

1 个答案:

答案 0 :(得分:7)

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

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

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

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