代码之家  ›  专栏  ›  技术社区  ›  paweloque

更改休眠映射的目标表

  •  1
  • paweloque  · 技术社区  · 15 年前

    是否可以更改休眠映射的目标表?我的用例是,当我从一个表中获取数据时,在无法处理数据的情况下,它存储在一个错误表中,以供以后分析。

    虽然可以在Hibernate映射中定义实体名,但在我看来这是不合适的,因为它需要复制映射。然后,将存在相同的映射,用于获取数据以及错误表的具有不同实体名称的数据副本。

    你对如何处理和解决这个问题有什么想法吗?

    4 回复  |  直到 15 年前
        1
  •  5
  •   Community Nick Dandoulakis    7 年前

    简短的回答-不。定义一个单独的映射(通过实体名)是可行的方法。

    答案很长——可以在构建sessionFactory之前通过运行时对配置进行操作。您可以从配置中定义的映射中获取相关实体的映射,将其复制到新实体名称下,并将其与新名称下基础表的副本关联。实际上,您仍然需要定义一个单独的映射,但这很难做到。

    看一看 this question .

        2
  •  2
  •   skaffman    15 年前

    正如@chssply76所提到的,您可以跳过Hibernate的API环来获取原始配置,摆弄它们,并为自己构建一个新的 SessionFactory .

    另一个同样令人不快的解决方案是,使用XSLT获取映射配置文件,并换掉表名以获取其他内容,然后将修改后的文件放入Hibernate,以构建新的 实习工厂 .

    这是相当大的距离,但它确实意味着你可以避免陷入冬眠的深度。

        3
  •  0
  •   Arthur Ronald    15 年前

    如上所述,

    如果无法处理数据,则将其存储在错误表中以供以后分析。

    除了chssply76的答案外,还可以定义全局HibernateException处理程序(如果使用Spring包装休眠连接,则应使用DataAccessException),并将错误详细信息记录在数据库或其他设备中,例如可以在任何位置看到的网页。

    当做,

        4
  •  0
  •   RMorrisey    15 年前

    你能用超类吗?如果数据具有所有相同的映射信息,但属于不同的表,那么可以将映射放在两个实体的公共父类上。使用映射的超类定义公共属性,然后将每个具体类定义为不同的实体,继承属性。在Hibernate注释中,这是使用父级上的@MappedSuperClass注释完成的。