GORM 1对多关系 - 创建3个表而不是2个

时间:2010-11-15 10:49:43

标签: grails gorm one-to-many

所有

我的问题是我在GORM中创建一对多的关系,并期望创建两个数据库表作为后备对象。创建了3使SQL查询过于复杂。

我在GORM文档中的1对多创建了一个紧密变体:

class Status {

   List errorMessage

   static hasMany = [errorMessage:ErrorMessage]
}

和错误消息类:

class ErrorMessage {

   String message

   static belongsTo = Status
}

我希望这能创建两个数据库表:


CREATE TABLE status {
   ID NUMBER(19,0),
   VERSION NUMBER(19,0),
   //other fields
}

CREATE TABLE error_message {
   ID NUMBER(19,0),
   VERSION NUMBER(19,0),
   STATUS_ID NUMBER(19,0),
   MESSAGE VARCHAR(255)
   //other fields
}

但实际上它想要第三张桌子,



CREATE TABLE status_text {
    status_text_id NUMBER(19,0),
    text_idx NUMBER(19,0), 
    text_id NUMBER(19,0)
}

将状态添加到ErrorMessage(一个hack,因为我不希望ErrorMessage具有对Status的引用)类删除第三个表但保留第二个外键导致Text子对象具有两个外键字段。

我想要的只是简单 - 只有一组附加到父级的对象将被删除 - 任何想法我做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

我认为你不能满足这两个要求,即你有级联删除和没有连接表。您需要belongsTo来获取级联删除,这使得关系成为双向关系。要删除连接表,请使用Map语法命名belongsTo:

class ErrorMessage {
   String message
   static belongsTo = [status: Status]
}