Grails 3.1.1 - 当模型类扩展另一个 groovy 类时脏检查不起作用

2024-03-07

我有一个域类,它扩展了另一个具有相同名称但在不同库中的不同包中的常规类。

问题是当我修改域类上的实例时,它没有被标记为脏,因此更改不会持久。

我读到 grails 3 版本对脏检查有一些增强,这可能是一个错误或者我遗漏了一些东西。

新对象可以正确保存,没有任何问题,我已经使用过是脏的()修改的域对象上的方法以及修改的属性&两者都返回false。对象附加到会话,并通过以下方式确认被附上().

为了重现,我使用以下代码创建了一个测试项目,并尝试从使用脚手架生成的默认 grails 视图更新对象,但更改仍然没有保留。

Note:我在 Grails 2.4 中做过类似的事情并且它曾经有效。

域类如下:

package com.perseus

class Derived extends Base{

    static constraints = {
        name blank: false, nullable: false
    }

}

src/main/groovy 中的基类:

package com.perseus

class Base implements Serializable {

    private static final long serialVersionUID = 1L

    String name

}

控制器

package com.perseus

class DerivedController {

    static scaffold = Derived

}

链接到githubproject https://github.com/Pritesh-Mhatre/grails.

Isssue:模型未标记为脏,即使已被修改。当模型类扩展另一个常规类时,就会发生这种情况。

如何重现:

  1. 运行应用程序。
  2. 创建一个新的模型对象(模型名称为Derived)
  3. 使用编辑视图修改对象并单击更新。
  4. 您将看到修改并未保留。

终于找到参考了here https://github.com/grails/grails-core/issues/10847这解释了更新脏检查状态失败的原因。

I added @脏检查注释并解决了问题。

然而,这对我们库的设计产生了负面影响。

我们为每个类别都有单独的项目:

  • 商业模式课程
  • 业务逻辑类
  • 用户界面

这个想法是让模块完全独立。因此任何 UI 技术都可以使用模型和业务逻辑库。现在的问题是我必须将 gorm 依赖项添加到我的业务模型项目中以进行注释。

compile 'org.grails:grails-datastore-gorm:6.1.7.RELEASE'

在设计方面,我们喜欢我们的模型类在一个完全独立于 UI 或持久技术(如 hibernate)的项目中。这样这些模型类就可以在各种不同的项目中使用,而无需任何额外的依赖项。到目前为止,我们通过创建一个新类来扩展库中的实际模型类,从而使用 grails 实现了这一目标

有什么办法可以在不修改基类的情况下解决这个问题吗?

简而言之,模型类 (POJO) 现在依赖于 grails 框架,而在早期版本中则不然。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Grails 3.1.1 - 当模型类扩展另一个 groovy 类时脏检查不起作用 的相关文章

随机推荐

  • Angular 5,具有 3 种状态的 Angular Material 复选框(选中、未选中、不确定)

    我是 Angular 和 Angular Material 的新手 现在我在一些项目中担任支持人员 有一个带有过滤器和一个复选框的网格 用于检查网格中的用户是否处于活动状态 非活动状态或未选择状态 如果只有两个选项 活动 非活动 会更简单
  • 媒体查询最大宽度与视图端口大小或窗口大小有关?

    我想知道媒体查询的最大宽度是否与视图端口大小或窗口大小有关 例如 我有这个媒体查询 media screen and max width 360px 当视口大小为 360px 或窗口大小为 360px 时 此媒体查询会起作用吗 这是视口 这
  • 使用 preg_replace 替换 php 中出现的所有内容

    正则表达式绝对是我的弱点 这个让我完全难住了 我正在构建一个相当基本的搜索功能 我需要能够根据以下模式更改用户输入 Subject 22first set 22 22second set 22 drupal wordpress 期望的输出
  • Selenium 2.42.2 webdriver 与 Firefox 27.0.1 兼容吗? [复制]

    这个问题在这里已经有答案了 Selenium 2 42 2 webdriver 与 Firefox 27 0 1 兼容吗 如果不兼容 那么它与哪个 Firefox 版本兼容 我正在使用 Selenium 2 42 2 网络驱动程序 我写的测
  • memcached 使用 Django 监听 UDP

    Question 我无法获得memcached正在听UDP 上班 get set delete 与姜戈 我只让 memcached 监听UDP 11211 正如我在上一个问题 https stackoverflow com question
  • 具有 Enum 类型属性的 WPF 用户控件

    我有一个UserControl called InputSensitiveTextBox继承自TextBox 它有一个我定义的属性CurrentInputType 其类型为MyControlsNamespace SupportedInput
  • 如何:旋转选定/设置的图像 (Flutter)

    从图像选择器 画廊 相机 中选择图像后 我成功地将图像旋转为横向 纵向 这工作正常 并将继续将新图像设置为我想要的方向 但是 我尝试使用相同的方法来旋转已选择 设置的图像 但它不起作用 这是我正在使用的逻辑 import package i
  • SASS/SCSS @import 前面的 ~ 是什么意思/做什么?

    我在 GitHub 上被告知开始使用 在我的 SASS SCSS 之前 import路径 试图用谷歌搜索但找不到正确的答案 我想这太新手了 甚至懒得写 但我想学习它 它指的是node modules目录 或其等效目录 例如 在 Angula
  • 如何获取 Zune 中定义的设备名称?

    在 Zune 中 可以通过 Zune gt 设置 gt 手机 gt 同步选项更改手机名称 例如 我将手机名称更改为 myphone lumia 900 我怎样才能得到这个名字 使用DeviceStatus DeviceName它仅返回型号
  • Python IDLE 无法打开文件,显示“打开文件操作无法连接到打开和保存面板服务”

    刚刚升级到带有 m1 pro 芯片的新 MBP 我在尝试通过 IDLE 打开文件时遇到一些奇怪的问题 它抛出一个错误 说 打开文件操作无法连接到打开和保存面板服务 我尝试重新安装python 当在IDLE的服务设置下查看时 我找不到这样的服
  • 如何重命名 android-debug.apk

    我正在使用 Cordova 5 1 1 和 ionic 框架来创建我的 android 但是 当我尝试构建 apk 时 为什么文件名始终是 android debug apk 有什么办法可以重命名吗 cordova 创建 hello com
  • 如何在每个页面的侧边栏中包含目录树

    我正在 Sphinx 中生成 html 文档 如何修改文档中每个 html 页面的侧边栏 以便它们包含目录树 默认情况下 目录树似乎只显示在master doc页面 并且仅在主区域而不是侧边栏 是否有捷径可寻 我将使用 readthedoc
  • Android studio 3.1 每次重建工程即可看到变化

    将我的 android studio 更新到版本 3 1 后 我遇到了一个问题 当我对代码进行一些更改时 然后启动执行 我会得到旧的代码执行 直到我重建项目或清理它并重试 那是问题吗 PS 这发生在我的旧项目中 我还没有尝试过新项目 我认为
  • scipy 中的修剪树状图(层次聚类)

    我有一个大约有 5000 个条目的距离矩阵 并使用 scipy 的层次聚类方法对矩阵进行聚类 我为此使用的代码是以下片段 Y fastcluster linkage D method centroid D distance matrix Z
  • git,在保留历史记录的同时移动/重命名文件的可靠方法

    我知道有 很多 现有问题看起来很相似 所以让我在问我的问题之前总结一下它们 答案是是否可以在 git 中移动 重命名文件并保留其历史记录 https stackoverflow com questions 2314652 is it pos
  • 使用 css 防止或禁用 div 中的自动图像调整大小(使用 bootstrap)

    我正在尝试显示图像的原始大小 通常它比包含它的 div 的宽度更大 在现代浏览器中 它会自动调整大小以适合父 div 即使当我使用overflow auto图像仍然会调整大小 那么 当外部 div 具有设定宽度时 如何防止图像大小调整呢 谢
  • 使用 MSBuild 和 CruiseControl .NET 构建和部署 VS2010 数据库项目

    我几乎拥有一个 NAnt 脚本来构建和部署 VS2010 数据库项目 但有一个错误阻碍了我 C Program Files x86 MSBuild Microsoft VisualStudio v10 0 TeamData Microsof
  • 一次性计算正弦和余弦

    我有一个科学代码 它使用同一参数的正弦和余弦 我基本上需要该参数的复指数 我想知道是否可以比分别调用正弦和余弦函数更快 而且我只需要大约 0 1 的精度 那么有什么方法可以找到默认的三角函数并截断幂级数以提高速度 我想到的另一件事是 有没有
  • OS X 中的 Bash 脚本绝对路径

    我正在尝试获取 OS X 上当前运行脚本的绝对路径 我看到很多回复都是为了readlink f 0 然而自从 OS X 以来readlink与 BSD 相同 只是不起作用 它适用于 GNU 版本 有没有现成的解决方案来解决这个问题 这三个简
  • Grails 3.1.1 - 当模型类扩展另一个 groovy 类时脏检查不起作用

    我有一个域类 它扩展了另一个具有相同名称但在不同库中的不同包中的常规类 问题是当我修改域类上的实例时 它没有被标记为脏 因此更改不会持久 我读到 grails 3 版本对脏检查有一些增强 这可能是一个错误或者我遗漏了一些东西 新对象可以正确