mysql - Grails 域是否可能没有 'id' ?

标签 mysql hibernate grails grails-orm

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

class SnbrActVector {

    int nid
    String term
    double weight

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

    static constraints = {
    }
}

当我运行这条 SQL 语句时,它失败了:

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

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

最佳答案

Gorm 需要一个 id 字段才能工作。您可以使用如下所示的 transient 变量来伪造分配的 ID。 getter 和 setter 将 nid 字段映射到 id 字段。

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

snbrActVectgor.save(insert:true)

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

关于mysql - Grails 域是否可能没有 'id' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2582904/

相关文章:

php - 检查数据库中是否存在记录

Mysql - 是否有更好的方法从具有相同 ID 的两个表中检索数据?

java - IN 子句中的 Hibernate 标准 DB2 复合键

java - 无法获取连接惰性初始化集合

Grails grails test-app 与 grails test-app -integration 的区别

mysql - 需要帮助从 MySQL 中的连接表中排除某些行

Hibernate 一对多级联持久化具有复合键的子项

grails - 服务验证域模型

grails - grails jasper插件和jquery插件与 Assets 管道冲突

php - 如何检查值是否存在于 MySQL 数据库中