如果不存在,休眠忽略列[关闭]

Posted

技术标签:

【中文标题】如果不存在,休眠忽略列[关闭]【英文标题】:Hibernate ignore column if not exist [closed] 【发布时间】:2013-03-07 20:10:43 【问题描述】:

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

【问题讨论】:

为了改进您的问题,请提供您尝试的详细信息(映射/类/表的 small 示例),为什么它不起作用可能包括错误信息。 我也有同样的问题。我通过创建一个注释为 MappedSuperclass 的主类解决了这个问题,它包含所有可用的属性。然后我创建了两个继承类。第一个被标记为没有自己的字段,第二个包含仅在可用数据库之一中的字段。此解决方案使用继承。但我希望它对某人有所帮助。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于如果不存在,休眠忽略列[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

EF Core:检查 OnModelCreating 中是不是存在列以忽略属性

如果存在不作为实体属性存在的列,休眠会崩溃吗?

如果类不存在,则执行此操作,否则忽略

SQL:如何定义表中不存在的额外列? [关闭]

一对多和一对多连续映射的休眠条件查询 - 表或视图不存在

如果不存在则插入数据的过程pl sql