大家好,我尝试添加食谱,一个食谱有很多调味品。调味品也可以属于许多食谱。
并且条件可以具有一些其他值,例如数量和数量的实体。
我在Bootstrap.groovy中收到以下错误(使用GGTS,Grails 2.4.4,mysql)
错误:
Message: No signature of method: marvelonlinerezepte.Zutat.addToRezept() is applicable for argument types: (marvelonlinerezepte.Rezept) values: [Bratwurst mit Sauerkraut]
Possible solutions: addToRezepte(java.lang.Object)
Line | Method
->> 32 | doCall in BootStrap$_closure1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 327 | evaluateEnvironmentSpecificBlock in grails.util.Environment
| 320 | executeForEnvironment . . . . . in ''
| 296 | executeForCurrentEnvironment in ''
| 262 | run . . . . . . . . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread
Error |
Forked Grails VM exited with error
bootstrap :
import org.junit.internal.runners.statements.FailOnTimeout;
import marvelonlinerezepte.Zutat
import marvelonlinerezepte.Rezept
import marvelonlinerezepte.MmRezepteZutaten
class BootStrap {
def init = { servletContext ->
Zutat sauerkraut = new Zutat()
Zutat bratwurst = new Zutat()
Zutat rapsoel = new Zutat()
sauerkraut.bezeichnung = 'Sauerkraut'
bratwurst.bezeichnung = 'Bratwurst'
rapsoel.bezeichnung = 'Rapsöl nativ'
sauerkraut.save()
bratwurst.save()
rapsoel.save()
Rezept bratwurstMitSauerkraut = new Rezept()
bratwurstMitSauerkraut.name = 'Bratwurst mit Sauerkraut'
bratwurstMitSauerkraut.zubereitung = 'Bratwurst in Öl anbraten bis Sie schön braun sind. Sauerkraut in einem Topf langsam erwärmen. Servieren und FERTIG :)'
bratwurstMitSauerkraut.zubereitungszeitInMinuten = 15
bratwurstMitSauerkraut.kcalProPerson = 350.55F
bratwurstMitSauerkraut.save(failOnError:true,flush:true)
/*here comes the error*/
sauerkraut.addToRezept(bratwurstMitSauerkraut)
bratwurst.addToRezept(bratwurstMitSauerkraut)
bratwurstMitSauerkraut.save(flush:true)
}
def destroy = {
}
}
我的网域类别:
package marvelonlinerezepte
class Rezept {
String name
String zubereitung
Integer zubereitungszeitInMinuten
Float kcalProPerson
static hasMany = [zutaten:Zutat]
static constraints = {
name(nullable:false, blank:false)
zubereitung(nullable:true, blank:true, size:50..10000)
kcalProPerson(nullable:true,blank:true,setScale:2)
zubereitungszeitInMinuten(nullable:true,blank:true)
}
static mapping = {
zubereitung type: 'text'
zutaten joinTable: [name: "mm_rezepte_zutaten", key: 'rezept_id']
}
String toString(){
return this.name;
}
}
package marvelonlinerezepte
class Zutat {
String bezeichnung
static belongsTo = Rezept
static hasMany = [rezepte:Rezept]
static constraints = {
bezeichnung(nullable:false, blank:false)
}
static mapping = {
rezepte joinTable: [name: "mm_rezepte_zutaten", key: 'zutat_id']
}
String toString(){
return this.bezeichnung;
}
}
package marvelonlinerezepte
import org.apache.commons.lang.builder.HashCodeBuilder
class MmRezepteZutaten implements Serializable {
Rezept rezept
Zutat zutat
Float menge = 1
String einheit = "g"
static constraints = {
menge min:0.01F
einheit inList: ["g", "l","ml", "EL", "TL","stck","prise"]
}
static mapping = {
table 'mm_rezepte_zutaten'
version false
id composite: ["rezept","zutat"]
}
boolean equals(other) {
if (!(other instanceof MmRezepteZutaten)) {
return false
}
other.rezept?.id == rezept?.id &&
other.zutat?.id == zutat?.id
}
int hashCode() {
def builder = new HashCodeBuilder()
if (rezept) builder.append(rezept.id)
if (zutat) builder.append(zutat.id)
builder.toHashCode()
}
static MmRezepteZutaten get(long rezeptId, long zutatId) {
find 'from mm_rezepte_zutaten where rezept.id=:rezeptId and zutat.id=:zutatId',
[rezeptId: rezeptId, zutatId: zutatId]
}
static MmRezepteZutaten create(Rezept rezept, Zutat zutat, boolean flush = false) {
new MmRezepteZutaten(rezept: rezept, zutat: zutat).save(flush: flush, insert: true)
}
static boolean remove(Rezept rezept, Zutat zutat, boolean flush = false) {
MmRezepteZutaten instance = MmRezepteZutaten.findByRezeptAndZutat(rezept, zutat)
instance ? instance.delete(flush: flush) : false
}
static void removeAll(Rezept rezept) {
executeUpdate 'DELETE FROM mm_rezepte_zutaten WHERE rezept=:rezept', [rezept: rezept]
}
static void removeAll(Zutat zutat) {
executeUpdate 'DELETE FROM mm_rezepte_zutaten WHERE zutat=:zutat', [zutat: zutat]
}
}
请帮帮我
最佳答案
我会简化关系。这可能是问题所在。您实际上并不需要拥有belongsTo。而且我很确定添加它会意味着一种调味品仅属于一种配方。
请尝试以下操作:
class Zutat {
String bezeichnung
}
class Rezept {
String name
String zubereitung
Integer zubereitungszeitInMinuten
Float kcalProPerson
static hasMany = [zutaten:Zutat]
}
让我知道是否有帮助。
关于grails - 引起多对多关注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728103/