是否可以更改Hibernate映射的目标表?我的用例是,当我从一个表中获取数据时,如果无法处理数据,则将其存储在错误表中以供以后分析。
虽然可以在hibernate映射中定义实体名称,但在我看来这是不合适的,因为它需要重复映射。然后将存在相同的映射以获取数据及其副本,并为错误表提供不同的实体名称。
您对如何处理和解决此问题有任何想法吗?
答案 0 :(得分:5)
简短回答 - 不。定义单独的映射(通过实体名称)是可行的方法。
长答案 - 可以在构建SessionFactory之前通过运行时操作配置来实现。您可以从配置中定义的Mappings获取相关实体的映射,将其复制到新实体名称下,并将其与新名称下的基础表的副本相关联。你实际上仍然会定义一个单独的映射,但是要做的很难。
答案 1 :(得分:2)
正如@ ChssPly76所提到的,你可以跳过Hibernate的API箍来获取原始配置,调整它们,并为自己建立一个新的SessionFactory
。
另一个同样令人不快的解决方案是使用XSLT获取映射配置文件并将表名替换为其他内容,然后将该修改后的文件提供给hibernate以构建新的SessionFactory
。
它非常令人厌恶,但它确实意味着你可以避免陷入Hibernate的深处。
答案 2 :(得分:0)
如上所述,
如果无法处理数据,则会将其存储在错误表中以供以后分析
除了ChssPly76的答案,你可以定义一个全局的HibernateException处理程序(如果你使用Spring来包装hibernate连接,你应该使用DataAccessException)并在你的数据库或其他设备(如你可以看到它的网页)中记录错误细节。任何地方。
的问候,
答案 3 :(得分:0)
你有可能使用超类吗?如果数据具有所有相同的映射信息,但属于不同的表,则可以将映射放在两个实体的公共父类上。使用映射的超类来定义公共属性,然后将每个具体类定义为不同的实体,继承属性。在hibernate注释中,这是使用父级上的@MappedSuperclass注释完成的。