ฉันมีคลาสโดเมนใน grails ที่ควรสร้างเพียงครั้งเดียวด้วยชื่อเดียวกัน เพื่อให้แน่ใจว่าฉันมีเมธอดคงที่ getColor และตัวสร้างส่วนตัวที่มีลักษณะดังนี้:
class Color {
String name
static hasMany = [moods: Mood]
// not accessible
private Color() {}
// not accessible because getColor should be used
private Color(String name) {
this.name = name
}
static getColor(String name) {
def color = Color.findByName(name.toLowerCase())
color ? color : new Color(name).save(flush:true)
}
def beforeValidate() {
name = name.toLowerCase();
}
}
เพื่อให้แน่ใจว่าวัตถุของ Color ถูกสร้างขึ้นโดยใช้วิธี getColor แบบคงที่เท่านั้น ฉันต้องการทำให้ตัวสร้างเป็นแบบส่วนตัว จนถึงขณะนี้ ฉันสามารถสร้างวัตถุที่มีสีได้ แต่เมื่อฉันใช้อินสแตนซ์นี้เพื่อสร้างวัตถุของ Object Mood
class Mood {
static belongsTo = [color:Color]
}
def color = Color.getColor('verylightgreen')
def mood = new Mood(color: color)
ฉันได้รับข้อยกเว้น:
error initializing the application: Could not instantiate bean class [de.tobi.app.Color]: Is the constructor accessible?
ข้อยกเว้นนี้ถูกส่งโดย
def mood = new Mood(color: color)
เหตุใดการสร้าง Mood จึงจำเป็นต้องเข้าถึงตัวสร้างสี ฉันผ่านวัตถุไปแล้ว .. และโดยทั่วไปแล้ววิธีที่ดีที่สุดใน groovy/grails คืออะไรในการซ่อนตัวสร้างคลาสโดเมนเพื่อควบคุมวิธีการสร้างวัตถุ โดยเฉพาะการใช้งานตัวควบคุมแผนที่ก็ควรปิดการใช้งานด้วยเช่นกัน
name
เป็นคีย์หลัก และColor
เกี่ยวข้องกับMood
อย่างไร - person dmahapatro   schedule 16.08.2013