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

人盡茶涼 提交于 2019-12-20 15:16:28

问题


Is it possible to create a table that has no 'id'? For example, this is my domain:

class SnbrActVector {

    int nid
    String term
    double weight

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

    static constraints = {
    }
}

When I run this SQL statement, it fails:

insert into snbr_act_vector values (5, 'term', 0.5)

I checked the table and 'id' is already set to autoincrement. I'm thinking that another option is to remove the 'id' itself. Or is there another workaround for this? Please assume that it is not an option to change the givent SQL statement.


回答1:


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



回答2:


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

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



回答3:


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




回答4:


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




回答5:


Yes in Oracle you can use ROWID for ID column.

class Document {
    String id

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

}


来源:https://stackoverflow.com/questions/2582904/is-it-possible-for-a-grails-domain-to-have-no-id

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