gpt4 book ai didi

java - 表数据覆盖

转载 作者:行者123 更新时间:2023-11-29 12:51:20 30 4
gpt4 key购买 nike

我目前正在从第三方获取一些静态数据。就是简单的一对多,像这样

garage:
id
name
desc
location
garage_price:
id
garage_id
price_type
price

有时,数据不正确,我需要更正它。同时,我想在某处保留原始来源数据并可能运行一些查询以显示更改。

我的问题是是否有人正在使用 SQL、Java 和 Hibernate 做类似的事情,您已经采用或将采用的方法是什么。

我可以向两个表添加一个 boolean 列“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)

在 parent 身上。

最佳答案

通常有多种选择:

  1. 使用 Hibernate Envers。它将保留完整的更改历史记录,因此如果您进行多项更改,每项更改都会在审计表中产生一行。这些表与您的主要数据表是分开的,这可能是有利的也可能是不利的,具体取决于您的要求。

  2. 使用您描述的方法:编写原始数据集,在修改之前复制它。您将需要两个额外的属性:

    标记原件的标志和技术 ID 确实具有唯一的主键。

  3. 与第二个版本一样,但您实际上可以在数据库中的触发器中执行此操作。这可能更快,无论数据如何插入都有效,并且在数据库中复制行实际上非常容易,而在 Java 中感觉相当麻烦。当然,许多 Java 开发人员认为编写触发器本身就是一个 PITA。如果您的应用程序通常不使用触发器和存储过程,那么也很容易忘记触发器,并且很容易混淆这些额外行的来源。

关于java - 表数据覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53199407/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com