是否可以创建一个没有'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语句。
答案 0 :(得分:6)
Gorm需要id字段才能工作。您可以使用如下的瞬态变量伪造指定的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'
}
}
答案 1 :(得分:4)
您可能需要指定nid是您的id列。
static mapping = {
version false
id generator: 'identity', column: 'nid'
}
答案 2 :(得分:2)
没有办法没有" id"。你可以做的是改变" id"的名称。字段使用分配的id生成器。
答案 3 :(得分:1)
尝试使用:“id(generator:'assigned')”而不是“id generator:'identity'”,看看是否从“id”数据库列中删除了autoincrement属性。
答案 4 :(得分:1)
在Oracle中,您可以使用ROWID作为ID列。
class Document {
String id
static mapping = {
table "DOCUMENTS"
version false
id column: 'ROWID'
}
}