嵌入式 Grails sql 次浏览

embedded grails sql views

我对在域 classes 中使用 sql 视图和 "embedded" 字段有疑问。我创建了一个 sql 视图(其中包含名称、shipping_name、billing_name 列),我将其与建模域 class 相关联,如下所示。两个 classes 在同一个文件中。我试图将 WebOrdressAddress 移动到它自己的文件中(在 src/main/groovy 中),但它不起作用。

class WebOrderView {

    String name

    WebOrderAddress shipping

    WebOrderAddress billing

    static embedded = ["shipping", "billing"]

    static mapping = {
        table 'web_order_vw'
        version false
    }
}

class WebOrderAddress {
    String name
}

当我使用取景器(如 WebOrderView.findByName('test'))时,我得到 "null"。如果我注释行 "embedded"、"shipping"、"billing" 并且我使用相同的查找器,我会得到一个结果。你能告诉我嵌入式字段有什么问题吗?嵌入字段是否适用于 sql 视图?我正在使用 Grails 3.2.11

谢谢

在看到 gorm 中的一个奇怪行为后,我终于找到了解决方案。我在 sql 视图(以及 WebOrderView 域 class 中)重命名了 "name" 字段。

class WebOrderView {

    String pname

    WebOrderAddress shipping

    WebOrderAddress billing

    static embedded = ["shipping", "billing"]

    static mapping = {
        table 'web_order_vw'
        version false
    }
}

class WebOrderAddress {
    String name
}

在启用 SQL 的情况下,没有嵌入字段,我得到以下 sql

select
    this_.name as name1_18_0_,
from
    web_order_vw this_ 
where
    this_.name=? limit ?

如果我使用嵌入式字段,字段 WebOrderView.name 已被 billing_name 替换(为什么是 GORM?!)并且生成的标准不相同(即使我使用相同的查找器)

select
    this_.billing_name as billing18_18_0_,
    this_.shipping_name as shippin25_18_0_
from
    web_order_vw this_ 
where
    this_.billing_name=? limit ?