如果不存在,Hibernate忽略列

kor*_*gui 0 java hibernate jpa

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

Joh*_*nna 8

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

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

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

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