我目前正在从第三方采购一些静态数据。这是一个简单的一对多
garage:
id
name
desc
location
garage_price:
id
garage_id
price_type
price
有时,数据不正确,我将需要对其进行更正。同时,我想将原始源数据保存在某个地方,并可能运行一些查询以显示更改。
我的问题是,是否有人在使用SQL,Java和Hibernate进行此类操作,您采用或将采用哪种方法。
我可以在两个表中添加一个布尔列“ original_data”,并且在进行更新之前,运行触发器以将行从garage或garage_price复制到“ original_garage”或“ original_price”表中,前提是original_data是真正。然后将original_data设置为false,所有进一步的更新都将在garage / garage_price表上进行。
这种方法有什么问题,人们通常如何在Hibernate / JPA中处理具有相同数据的多个表?以前,我将创建一个包含所有数据的类,并将其子类化两次,每个表一次,同时设置
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
在父级上。
答案 0 :(得分:2)
通常有多种选择:
使用休眠Envers。它会保留完整的更改历史记录,因此,如果您进行多次更改,则每个更改都会导致审核表中的一行。这些表与您的主要数据表是分开的,根据您的要求,主要数据表可能是有利的也可能是不利的。
使用您描述的方法:编写原始数据集,在修改之前复制它。您将需要两个附加属性:
标记原始文件和技术ID的标志确实具有唯一的主键。
只是第二个版本,但实际上您可以在数据库的触发器中执行此操作。不管是如何插入数据以及在数据库中复制行,这实际上都比较容易,但是这样做可能更快一些,尽管在Java中感觉很麻烦。当然,许多Java开发人员将编写触发器本身视为PITA。如果您的应用程序通常不使用触发器和存储过程,那么也很容易忘记触发器,并且很困惑这些附加行的来源。