gpt4 book ai didi

stored-procedures - 如何在 Hibernate 中创建临时表?

转载 作者:行者123 更新时间:2023-12-04 08:59:10 28 4
gpt4 key购买 nike

目标

  • 调用 CREATE TEMPORARY TABLE Hibernate 中的语句,而不使用 native SQL。这意味着仅使用 HQL 或 Hibernate API。
  • 将对象保存到临时表。
  • 调用一个使用现有表和临时表的存储过程。
  • DROP完成后的临时表。 (我知道没有必要,但我认为这样做是一个好习惯。)

  • 背景
  • 我对 SQL 非常熟悉,但对 Hibernate 不熟悉。
  • 由于某人的决定,我被迫在项目中使用 Hibernate。
  • 我要将 Web 表单保存到 Oracle 数据库。
  • Web 表单包含一个充满文本字段(由其他人设计)的表格,每个单元格中都有一个。
  • 当用户点击 Save ,值 必须保存在单个事务中。
  • Web 表单由数据库 View 支持。
  • 数据库 View 是使用 EAV 模式从数据库表创建的。
    (这样做是因为列在某种程度上是动态的。)
  • Web 表单中的每个文本字段都由数据库表中的一行建模。
  • 显示 Web 表单使用 SELECT观点的陈述。
  • 更新网络表单使用 UPDATE View 上的语句,它调用了 INSTEAD OF View 的触发器。
  • 仅更新更改的值。每个更新都有一个审计跟踪。
  • 如果其他用户在没有通知的情况下更新了任何值,则事务将回滚。以下是此类场景的示例:(I) a 的值是 4当用户显示 Web 表单时 (II)另一个用户将同一字段更新为 5 (III)第一个用户将字段更新为 2并提交网络表单。

  • 最初提出的解决方案
  • 使用 AJAX (jQuery) 检测文本字段中的更改,并仅提交用户更改的内容。
  • 但是,需要在数据库中检测其他用户所做的更改。

  • 解决方案应该更有效
  • 当用户点击 Save ,创建一个临时表(临时表是一个只有当前 session /连接才能看到的表,在 session 关闭/断开时自动删除)并将对象(单元格)保存到临时表中。
  • 开始交易。
  • 锁定一些现有表(或仅相关行,以提高性能)。
  • 将提交的数据与现有数据进行比较。
  • 如果发生了任何未引起注意的更改,请回滚事务。
  • 更新必要的行。
  • 提交事务并解锁表。
  • 删除临时表。

  • 有什么想法吗?

    最佳答案

    这不能满足您的确切要求,但鉴于没有尝试回答...您是否考虑过使用类似 http://csvjdbc.sourceforge.net/ 的临时 CSV 表? .

    虽然它不符合通过 hibernate 进行的要求,但它与数据库无关且跨平台。

    关于stored-procedures - 如何在 Hibernate 中创建临时表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3278211/

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