gpt4 book ai didi

没有 ID 字段或具有部分 NULL 复合字段的 Grails 域类

转载 作者:行者123 更新时间:2023-12-02 06:39:09 25 4
gpt4 key购买 nike

根据对上一个问题的回答(此处回答:SQL/Database Views in Grails),我尝试使用域类来表示数据库中的 View 。然而,这在大多数情况下都非常有效:

我有一个没有唯一键的 View 。假设基础表如下所示:

答:
id,varX
1、“废话”
2、“福”
3、“酒吧”

B:
id,A.id,C.id
1,2,1
2,2,2
3,3,1

C:
id,varY
1、“轰”
2、“失败”

我的观点如下:
A.id,varX,B.id,C.id,varY
1,"废话",NULL,NULL,NULL
2,"Foo",1,1,"轰隆"
2,"Foo",2,2,"嘶嘶"
3,"酒吧",3,1,"繁荣"

这正是我们的目的所应该的样子。然而,正如您所看到的,我们可以为 View 构建的最佳唯一复合 id 是 ['A.id','C.id'],因为这唯一地标识了每个元素,但 Grails 失败了,因为它似乎无法处理复合 ID 的一部分为 NULL(实际上,list() 返回 4 个对象的列表,第一个是空指针,其余的是 View 的实际域实例)。

请注意,我们也可以使用 A.id 和 B.id,但它会遇到同样的问题。

另请注意,我们希望至少显示一次表 A 中的元素(表 B/C 中未找到的任何字段为空值),如果表 B 中有多个相应条目,则可能会显示多次。

所以,我的问题分为两部分:
1:是否可以定义一个根本没有任何ID字段的grails域类?我们不需要任何 View 条目的永久句柄,我们只需要列出该 View 中的数据。
2:如果没有,是否可以定义一个具有复合ID字段的grails域类,其中一部分可能为NULL,但即使复合ID的一部分为NULL,它仍然可以唯一标识一行?

我知道我们可以使用直接的 Groovy SQL 直接查询 View ,而无需关联的域类(我们现在实际上正在这样做),但理想情况下我们希望用域类来表示 View 。此外,抛开所有争论不谈,这两个问题的应用范围比我们的特定问题要广泛得多。

最佳答案

我们以前也遇到过这个问题。

根据我的经验,复合 ID 在 Grails 或 Hibernate 中并没有得到很好的支持。

我们总是找到一种方法为我们的所有域类提供唯一的 ID。

对于真实的表,我们只需添加一个自动增量字段,即使我们不使用 grails,我们也会使用复合键。

对于数据库 View ,我们通常在其中一个连接表中已经有一个 ID,该 ID 在该上下文中最终是唯一的,但如果没有,可以通过一些方法来破解/模拟它。例如,在 SQL 中,只需将要在复合键中使用的键连接为单个字段,并将其用作键即可。

关于没有 ID 字段或具有部分 NULL 复合字段的 Grails 域类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/430004/

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