简体   繁体   English

Grails:如何使用grails约束定义主从视图

[英]Grails: how to define a master-detail view with grails constraints

I want to create a simple master/detail view with these tables: 我想用这些表创建一个简单的主视图/详细视图:

create table MASTER_ID2
(
   ID                   int not null,
   VALOR                varchar(40),
   primary key (ID)
);

create table DETAIL_ID2
 (
   ID                   int not null,
   ID_MASTER            int not null,
   VALOR_DET            char(40),
   primary key (ID)
);

alter table DETAIL_ID2 add constraint FK_RDET5 foreign key (ID_MASTER)
      references MASTER_ID2 (ID) on delete restrict on update restrict;

I have these domain classes: 我有这些域类:

class MasterId2 {

    Integer id
    String valor
    //
    static hasMany = [details : DetailId2]

    static mapping = {
        table 'master_id2'
        version false
        id generator:'identity', column:'ID'
        //
        details column: 'id_master'     
    }

    static constraints = {
        id(max: 2147483647)
        valor(size: 0..40)
    }

    String toString() {
        return "${id}" 
    }
}

class DetailId2  implements Serializable {

    Integer id
    Integer id_master
    String valor_det
    //
    MasterId2 master
    static belongsTo = MasterId2

    static mapping = {
        table 'detail_id2'
        version false
        id generator:'identity', column:'ID'
    }

    static constraints = {
        id(max: 2147483647)
        valor_det(size: 0..40)
    }

    String toString() {
        return "${id}" 
    }
}

But the detail view doesn't assign a foreign key. 但是细节视图不会分配外键。

What is wrong in my code? 我的代码有什么问题?


i make this changes 我做这个改变

class MasterId2 { 类MasterId2 {

Integer id
String valor
//
static hasMany = [details : DetailId2]

static mapping = {
    table 'master_id2'
    // version is set to false, because this isn't available by default for legacy databases
    version false
    id generator:'identity', column:'ID'
    //
    details column: 'id_master'     

} }

static constraints = {
    id(max: 2147483647)
    valor(size: 0..40)
}
String toString() {
    return "${id}" 
}

} }

class DetailId2 implements Serializable { 类DetailId2实现了Serializable {

Integer id
Integer id_master
String valor_det
//
//MasterId2 master
//static belongsTo = MasterId2
static belongsTo = [master: MasterId2]

static mapping = {
    table 'detail_id2'
    // version is set to false, because this isn't available by default for legacy databases
    version false
    id generator:'identity', column:'ID'
    //
    master insertable: false               // enforce foreign key
    master updateable: false               // enforce foreign key

} }

static constraints = {
    id(max: 2147483647)
    valor_det(size: 0..40)
}
String toString() {
    return "${id}" 
}

} }

but i get this form 但我得到这张表格

Valordet -> edit Valordet->编辑

Idmaster * -> edit Idmaster *->编辑

Master * -> listbox without values 主*->没有值的列表框

any idea? 任何想法?

Change the mapping of DetailId2 from 从更改DetailId2的映射

static mapping = {
        table 'detail_id2'
        version false
        id generator:'identity', column:'ID'
    }

to

static mapping = {
        table 'detail_id2'
        version false
        id generator:'identity', column:'ID'
        master insertable: false               // enforce foreign key
        master updateable: false               // enforce foreign key
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM