【问题标题】:GORM - read and write from/into separate tablesGORM - 从/写入单独的表
【发布时间】:2016-06-16 10:22:17
【问题描述】:

我正在开发一个允许用户修改数据库中的某些数据的 Web 应用程序。用户指定搜索条件(例如姓名或姓氏),然后应用程序根据给定条件搜索数据,将其显示在 UI 上,用户编辑数据并按下“保存”按钮。

目前所有编辑都会影响同一张表 (person)。但我需要更改应用程序的逻辑:read 操作 (SELECT) 应该适用于一个表 (person)。所有write 操作(INSERT、UPDATE 等)都应应用于另一个表 (person_changes)。是否可以通过映射或调整另一个纯 GORM 设置来实现这种行为?或者我需要为每个 SELECT、INSERT、UPDATE 开发 HQL 查询?

现在我的域类看起来像这样:

class Person implements Serializable {
    private static final long serialVersionUID = -6023326467985259987L;

    String id
    String name
    String surname

    static mapping = {
        datasource 'stuff'
        table 'person'
        cache true
        version false
        id column: 'id', generator: 'assigned'
    }

    static constraints = {
        id(bindable: true, nullable: false, blank: false)
    }
}

我使用 Grails 2.3.11Hibernate 3.6.10.19

【问题讨论】:

  • 查看数据源 ['stuff', 'main'] 两个 DSN,然后也许您可以将 Person 类扩展为 PersonEdit 类,然后将此“stuff”的数据源设为您要写入的数据源。然后,您将自动获得 2 个数据库,其中 1 个包含真实数据,另一个包含真实数据 + 更新。然后,您可以比较或与两个数据库进行比较。实际上听起来你只需要在历史表中保留表更改的历史以供参考,而不是所有这些疯狂

标签: database hibernate grails grails-orm


【解决方案1】:

是否可以通过映射或调整另一个纯 GORM 设置来实现这种行为?

没有

或者我需要为每个 SELECT、INSERT、UPDATE 开发 HQL 查询?

HQL 不会帮助您。 Hibernate(因此是 GORM)从根本上假设持久类总是从同一个表中读取和写入

老实说,这个要求听起来很奇怪,如果你正在写的表和你正在读的表不同,你怎么会真正读到任何东西?

【讨论】:

  • 是的,这是一个奇怪的要求。每个月我们的组织都从 CD 导入数据库(公司政策 - 我不能在这里告诉更多......)。但有时这些数据有点无效(例如,缺少姓氏等)。所以我们需要对这些基准进行小修正。但是现在我们不允许更改来自 CD 的表中的数据。我们创建了新表来保存所有更改。因此,每个更改的数据都出现在单独的表中(也称为版本控制)。我正在寻找最简单的拆分 readwrite 操作的解决方案(对 DAO 层的干预最少)。
  • 我发现可以在 INSERT、UPDATE 和 DELETE 以及数据库视图上借助数据库规则(我们实际上使用 PostgreSQL)来协商该问题。所以根本不需要接触源代码!
猜你喜欢
  • 2017-04-29
  • 2017-12-19
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
相关资源
最近更新 更多