休眠忽略列如果不存在

问题描述:

好的问题是,我有一个应用程序,使查询不同的数据库,和一些实体有丢失的列。有没有办法忽略丢失的列而不使用继承?休眠忽略列如果不存在

+2

为了改善您的问题,提供了您所尝试的细节(一个* small *示例的映射/类/表),为什么它不起作用可能包括错误消息的示例。 – Gus 2013-03-07 20:20:56

+0

我有同样的问题。我通过创建一个注解为MappedSuperclass的主类来解决该问题,该类包含所有可用的属性。然后我创建了两个入门课程。第一个被标记为没有自己的字段,第二个包含字段,只在一个可用的DB中。该解决方案使用继承。但我希望它能帮助别人。 – Jens876 2015-04-09 09:30:21

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

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

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

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