ฉันกำลังสร้างแอป grails บนฐานข้อมูลเดิม
มีตารางที่ฉันต้องการสร้างวัตถุโดเมนที่แตกต่างกันหลายรายการ (Type1, Type2 และ Type3 ในตัวอย่างของฉันด้านล่าง)
ตารางเป็นเหมือน นี้ :
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
...
ดังนั้นฉันจึงต้องการสร้างคลาสโดเมนที่แตกต่างกัน 3 คลาส โดยแต่ละคลาสจะมีฟิลด์ชื่อ "คำอธิบาย" และสอดคล้องกับ "ประเภท" ที่เฉพาะเจาะจง เนื่องจากแถวต่างๆ แสดงถึงแนวคิดที่แตกต่างกัน
มีข้อจำกัดใดบ้างที่อนุญาตให้ฉันกรองแถวตามประเภท
ฉันหมายถึงฉันสามารถทำอะไรบางอย่างเช่น:
class Type1 {
String type
String description
static mapping = {
table 'mytable'
}
static constraints = { type == 'type1' } // Is there anything like this ?
}
จากนั้นฉันคาดหวังว่า Type1.list() จะสร้างแบบสอบถามเช่น:
SELECT type, description
FROM mytable
WHERE type = 'type1'
อัปเดต :
จริงๆ แล้ว เอกสารประกอบ บอกว่าฉันสามารถใช้ discriminator เพื่อให้บรรลุผลได้ นี้.
อย่างไรก็ตาม ฉันพยายามกำหนดชั้นเรียนของฉันดังนี้:
class Type1 extends BaseType {
static mapping = {
discriminator column:'type', value: 'type1'
}
}
ฉันเปิดใช้งานการติดตาม SQL ไฮเบอร์เนตและแทนที่จะเห็น
SELECT ... FROM mytable WHERE type = 'type1'
ฉันเห็น
SELECT ... FROM mytable WHERE class = 'type1'
ดูเหมือนว่าผู้เลือกปฏิบัติจะเพิกเฉยต่อชื่อคอลัมน์ที่กำหนดเองของฉันโดยสิ้นเชิง :-(
ฉันใช้ Grails 1.2.1