我的grails域对象中有一个字段,我想成为其他表的派生字段。我的域名如下所示
class VotingTally{
int votesSource1
int votesSource2
int totalVotes
}
static mapping = {
totalVotes formula: (votesSource1.numOfVotes+ votesSource2.numOfVotes)
}
我得到的错误是
No such property: votesSource1 for class: org.grails.datastore.mapping.config.groovy.MappingConfigurationBuilder
答案 0 :(得分:1)
首先,formula
应该是一个带有SQL表达式的字符串(你有Groovy表达式)。像:
static mapping = {
totalVotes formula: 'numOfVotes1 + numOfVotes2'
}
但是在你的情况下,你想要计算连接表中的值,而这是不可能的。你无法从这里添加JOIN
。
似乎只有一种方法 - 从代码中加载它:
static transients = ['totalVotes']
int getTotalVotes() {
VotesSource.get(votesSource1).numOfVotes + VotesSource.get(votesSource2).numOfVotes
}
答案 1 :(得分:0)
正如Andrew von Dollen所提到的,你仍然可以通过使用子选择来使用公式,但它并不总是最佳选择。此外,您的域名需要有一种方式来关联两个投票来源(通常是一对多或多对多关系)。它相当于:
static mapping = {
totalVotes formula: '((select count(*) from vote_source_1 vs1 where vs1.source_id = id) + (select count(*) from vote_source_2 vs2 where vs2.source_id = id))'
}