Saya memiliki kelas domain di grails yang hanya boleh dibuat sekali dengan nama yang sama. Untuk memastikan bahwa saya memiliki metode statis getColor dan konstruktor pribadi yang terlihat sebagai berikut:
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();
}
}
untuk memastikan bahwa objek Warna hanya dibuat dengan menggunakan metode getColor statis, saya ingin menjadikan konstruktornya pribadi. Sejauh ini berhasil, saya bisa membuat objek Berwarna. Tetapi ketika saya menggunakan instance ini untuk membuat objek Object Mood
class Mood {
static belongsTo = [color:Color]
}
def color = Color.getColor('verylightgreen')
def mood = new Mood(color: color)
Saya mendapat pengecualian:
error initializing the application: Could not instantiate bean class [de.tobi.app.Color]: Is the constructor accessible?
Pengecualian ini diberikan oleh
def mood = new Mood(color: color)
Jadi mengapa pembuatan Mood memerlukan akses ke konstruktor Warna. Saya sudah melewati objeknya.. Dan secara umum, apa cara terbaik di groovy/grails untuk menyembunyikan konstruktor kelas domain untuk mengontrol bagaimana objek dibuat. Terutama penggunaan pengontrol peta juga harus dinonaktifkan.
name
kunci utama? Dan BagaimanaColor
dikaitkan denganMood
? - person dmahapatro   schedule 16.08.2013