Saya membuat aplikasi grails melalui database lama.
Ada tabel di mana saya ingin membuat beberapa objek domain berbeda (Tipe1, Tipe2, dan Tipe3 dalam contoh saya di bawah).
Tabelnya seperti ini :
ID TYPE DESCRIPTION
1 type1 description of a type1 object
2 type1 description of another type1 object
3 type2 description of a type2 object
4 type3 description of a type3 object
...
Jadi saya ingin membuat 3 kelas domain berbeda, masing-masing berisi bidang bernama "deskripsi", dan sesuai dengan "tipe" tertentu, karena baris-barisnya mewakili konsep yang berbeda.
Apakah ada batasan yang memungkinkan saya memfilter baris berdasarkan jenis?
Maksudku, bisakah aku melakukan sesuatu seperti:
class Type1 {
String type
String description
static mapping = {
table 'mytable'
}
static constraints = { type == 'type1' } // Is there anything like this ?
}
Lalu saya berharap Type1.list() menghasilkan kueri seperti:
SELECT type, description
FROM mytable
WHERE type = 'type1'
Memperbarui :
Sebenarnya dokumentasi mengatakan bahwa saya dapat menggunakan diskriminator untuk mencapai ini.
Namun, saya mencoba mengatur kelas saya sebagai berikut:
class Type1 extends BaseType {
static mapping = {
discriminator column:'type', value: 'type1'
}
}
Saya mengaktifkan penelusuran SQL hibernasi, dan bukannya melihat
SELECT ... FROM mytable WHERE type = 'type1'
Jadi begitu
SELECT ... FROM mytable WHERE class = 'type1'
Tampaknya diskriminator sepenuhnya mengabaikan nama kolom khusus saya :-(
Saya menggunakan Grails 1.2.1