Grails Domain是否可能没有'id'?

fir*_*iel 7 mysql grails hibernate grails-orm

是否可以创建一个没有'id'的表?例如,这是我的域名:

class SnbrActVector {

    int nid
    String term
    double weight

    static mapping = {
        version false
        id generator: 'identity'
    }

    static constraints = {
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行此SQL语句时,它失败:

insert into snbr_act_vector values (5, 'term', 0.5)
Run Code Online (Sandbox Code Playgroud)

我检查了表格,'id'已经设置为自动增量.我认为另一种选择是删除'id'本身.或者还有其他解决方法吗?请假设不能更改给定的SQL语句.

Llo*_*olz 7

Gorm需要id字段才能工作.您可以使用如下的瞬态变量伪造指定的ID.getter和setter将nid字段映射到id字段.

使用此方法保存域对象时,您必须执行以下操作:

snbrActVectgor.save(insert:true)
Run Code Online (Sandbox Code Playgroud)

因为grails认为非null id是一个持久化实例.

class SnbrActVector {
    Integer id
    // nid is the actual primary key
    static transients = ['nid']
    void setNid(Integer nid) {
        id = nid
    }
    Integer getNid() {
        return nid
    }

    static mapping = {
        version false
        id generator:'assigned', column:'nid', type:'integer'
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 1

尝试使用:“id(生成器:'分配')”而不是“id生成器:​​'身份'”,看看是否会从“id”数据库列中删除自动增量属性。