Is it possible for a Grails Domain to have no 'id'?

旧街凉风 提交于 2019-12-03 04:06:58

Gorm requires an id field to work. You can fake an assigned id by using a transient variable like below. The getters and setters map the nid field to the id field.

When saving a domain object using this method you have to do:

snbrActVectgor.save(insert:true)

because grails thinks a non-null id is a persistent instance.

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'
    }
}

You probably need to specify that nid is your id column.

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

There is no way to have no "id". what you can do is change the name of "id" field using assigned id generator.

Try using: "id( generator: 'assigned')" instead of "id generator: 'identity'" and see if that removes the autoincrement property from the "id" database column.

Yes in Oracle you can use ROWID for ID column.

class Document {
    String id

    static mapping = {
        table "DOCUMENTS"
        version false
        id column: 'ROWID'
    }

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!