基于此GORM Domain类:
?- list_nextmin_gt([3,2,1,2,3], M, _).
( M = 1
; M = 2
; M = 3
; false
).
我的问题是:
class Component implements Serializable {
Long id
String name
Double total
Long parentComponentId
static mapping = {
...
}
static constraints = {
...
parentComponentId nullable: true
}
}
是parentComponentId
的另一个实例。
Component
答案 0 :(得分:1)
只需将Long parentComponentId
更改为Component parentComponent
即可。您也不需要Long id
属性,因为Grails会为您添加:
class Component implements Serializable {
String name
Double total
Component parentComponent
static constraints = {
parentComponent nullable: true
}
}
然后您可以访问父组件和父组件ID:
assert Component.read(1).parentComponentId == Component.read(1).parentComponent.id
如果您想要级联删除,则需要删除parentComponent属性并添加:
static hasMany = [nestedComponents: Component]
static belongsTo = [parentComponent: Component]
我假设你有0:N
关系,如果不是,你需要改变它。检查the documentation for defining associations。
至于你的第二个问题,遗憾的是你还没有在标准中使用having
:https://jira.grails.org/browse/GRAILS-7880
您可以使用HQL执行此操作:
Component.executeQuery("""
select parent from Component parent, Component nested
where nested.parentComponent = parent
group by parent
having parent.total = sum(nested.total)
""".toString())
答案 1 :(得分:0)
你可以在第一个问题上这样做。
class Component implements Serializable {
Long id
String name
Double total
static belongsTo = [parentComponentId:Component]
static mapping = {
...
}
static constraints = {
...
parentComponentId nullable: true
}
}