根据对上一个问题的回答(此处回答:Grails 中的 SQL/数据库视图 https://stackoverflow.com/questions/425294/sql-database-views-in-grails#427691),我尝试使用域类来表示数据库中的视图。然而,这在大多数情况下都非常有效:
我有一个没有唯一键的视图。假设基础表如下所示:
A:
id,varX
1、“呸”
2,"Foo"
3,"Bar"
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,"繁荣"
这正是我们的目的所应该看到的。然而,正如您所看到的,我们可以为视图构造的最佳唯一复合 id 是 ['A.id','C.id'],因为这唯一地标识了每个元素,但 Grails 失败了,因为它似乎无法处理复合 ID 的一部分为 NULL(实际上,list() 返回 4 个对象的列表,第一个是空指针,其余的是视图的实际域实例)。
请注意,我们也可以使用 A.id 和 B.id,但它会遇到同样的问题。
另请注意,我们希望至少显示一次表 A 中的元素(表 B/C 中未找到的任何字段为空值),如果表 B 中有多个相应条目,则可能显示多次。
所以,我的问题分为两部分:
1:是否可以定义一个根本没有任何ID字段的grails域类?我们不需要任何视图条目的永久句柄,我们只需要列出该视图中的数据。
2:如果没有,是否可以定义一个具有复合 ID 字段的 grails 域类,其中一部分可能为 NULL,但即使复合 ID 的一部分为 NULL,它仍将唯一标识一行?
我知道我们可以使用直接的 Groovy SQL 直接查询视图,而不需要关联的域类(我们现在实际上正在这样做),但理想情况下我们希望用域类来表示视图。此外,抛开所有争论不谈,这两个问题的应用范围比我们的特定问题要广泛得多。