目标

  1. 在不使用本机SQL的情况下在Hibernate中调用CREATE TEMPORARY TABLE语句。这意味着使用HQL或Hibernate API。
  2. 将对象保存到临时表。
  3. 调用使用现有表和临时表的存储过程。
  4. DROP完成后临时表。 (我知道这不是必要的,但我认为这是一个很好的习惯。)
  5. 背景

    1. 我非常熟悉sql,但新的休眠。
    2. 我被迫在一个项目中使用Hibernate,因为你知道,某人的决定。
    3. 我要将一个web表单保存到Oracle数据库。
    4. Web表单包含一个充满文本字段的表(由其他人设计),每个单元格中的表格。
    5. 当用户单击 Save 时,必须在单个事务中保存的值
    6. Web表单由数据库视图备份。
    7. 数据库视图是从使用EAV模式的数据库表创建的。 (它是这样做的,因为列是一种动态的。)
    8. Web表单中的每个文本字段都是在数据库表中的一行建模的。
    9. 显示Web表单在视图上使用SELECT语句。
    10. 更新Web表单在视图上使用UPDATE语句,调用视图的INSTEAD OF触发器。
    11. 只更改更改的值。每个更新都有一个审计跟踪。
    12. 如果在没有用户注意事项的情况下由其他用户更新任何值,则会回滚事务。以下是这种场景的示例:生成acticeTagcode当用户显示Web表单生成的字段时是生成的,另一个用户将相同的字段更新为生成的字段,第一用户将字段更新为生成的字段并提交Web表单。

      最初提出的解决方案

      1. 使用ajax(jQuery)检测文本字段中的更改,并仅提交用户更改的更改。
      2. 然而,需要在数据库中检测到另一个用户所做的更改。

        解决方案应该更好地工作

        1. 当用户单击 (I) 时,创建一个临时表(临时表是仅由当前会话/连接看到的表,并且在会话关闭/断开连接时自动删除)将对象(单元格)保存到临时表中。
        2. 开始交易。
        3. 锁定一些现有表(或仅相关行,以进行性能)。
        4. 将提交的数据与现有数据进行比较。
        5. 如果进行了任何不受伤的变化,回滚交易。
        6. 更新必要的行。
        7. 提交事务并解锁表。
        8. 删除临时表。
        9. 有什么想法吗?

有帮助吗?

解决方案

这没有回答您的确切要求,但鉴于答案没有尝试......您是否考虑使用临时CSV表使用 http://csvjdbc.sourceforge.net/

虽然它不符合通过Hibernate进行的要求,它是数据库不可知论者和跨平台。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top