Postgresql 将默认id映射为用户定义zid不允许插入数据
我有一个域类Postgresql 将默认id映射为用户定义zid不允许插入数据,postgresql,grails,Postgresql,Grails,我有一个域类Zbusiness,我想将数据插入到Zbusiness表中,但我不想使用grails默认id插入数据,所以我使用id生成器:'assigned',name:'zid',由于我已将grails默认主键id替换为我的zbusiness表的zid列,现在我无法将数据插入数据库。初始化应用程序时显示错误:错误评估域[myshaheen.zbusiness]的ORM映射块:null 消息:评估域[myshaheen.Zbusiness]的ORM映射块时出错:在保存之前应手动插入nullid我该
Zbusiness
,我想将数据插入到Zbusiness表中,但我不想使用grails默认id插入数据,所以我使用id生成器:'assigned',name:'zid',
由于我已将grails默认主键id替换为我的zbusiness
表的zid
列,现在我无法将数据插入数据库。初始化应用程序时显示错误:错误评估域[myshaheen.zbusiness]的ORM映射块:null
消息:评估域[myshaheen.Zbusiness]的ORM映射块时出错:在保存之前应手动插入null
id
我该怎么做?是否有任何方法将zid
传递为id
以将数据插入Zbusiness
表中
我希望默认的id字段
将被zid值
自动替换,而不是手动替换。我将输入xshort、xtaxnum、xadd1、xadd2
,并且zid字段将填充一个特定值,该值将像id
一样递增
这是我的域名类
//Zbusiness.groovy
class Zbusiness implements Serializable{
String xshort
String xtaxnum
String xadd1
String xadd2
static mapping = {
version false
id generator:'assigned', name:'zid'
xtaxnum length: 100
xshort length: 100
xadd1 length: 100
xadd2 length: 100
}
ID映射执行两个功能:
生成器:'assigned'
-表示要手动设置IDname:'zid'
-将ID属性从ID
更改为zid
name
属性更改的是ID属性,而不是列。你说:
…因为我已经用zbusinesstable的zid列替换了grails默认主键id
但事实并非如此。相反,您将Grails默认ID属性ID
部分替换为zid
。我之所以这样说,部分是因为您指示Grails使用一个属性(zid
),而该属性在您的域类中并不存在
现在怎么办?
由于zbusiness
表有一个名为zid
的主键列,要将此列用作域类的ID,需要使用column属性:
id generator:'assigned', column:'zid'
使用上面显示的映射,您可以创建Zbusiness
的实例,如下所示:
def instance = new Zbusiness(id: 123, xshort: 'a', xtaxnum: 'b', xadd1: 'c', xadd2: 'd').save()
在上面的示例中,我在
save()
”加载实例之前手动设置了id,使用名为id的属性。在保存对象之前是否尝试过设置zid
?没有,我没有尝试过。我不清楚如何使用它。我在使用jsp servlet的netbeans中使用了setter-getter方法,但在grails中没有使用。它是如何完成的。您当前如何创建Zbusiness
对象?正在创建Zbusiness对象当我运行应用程序时。但是`初始化应用程序时出错:为域[myshaheen.Zbusiness]计算ORM映射块时出错:null消息:为域[myshaheen.Zbusiness]计算ORM映射块时出错:null`显示此错误。但当我评论这两行时,版本FalseID生成器:'assigned',名称:'zid'然后grails主页显示,我可以通过单击ZbusinessControllerwhere来插入数据我应该在控制器内还是在域类内创建def实例?我只想手动设置id其他字段将由用户输入填充它不工作我编写了def实例=新的Zbusiness(id:123)。save()在控制器中。我没有编写其他4个变量,因为它们将使用grails crud功能保存。我需要手动保存id值,如6500065001等。上次使用的id生成器:'sequence',column:'zid',type:'long'现在正在保存id值,但1,2,3不是我指定的值。首先,要保存实例,它必须通过验证。在您的示例域类中,其他四个属性不可为null,因此,如果不赋值,则保存之前的值将失败。其次,您分配的id将被拒绝,因为生成器设置为Sequences,需要将其设置为assigned。这是我卡住的地方。我已将id generator设置为assigned,但如何分配任何值我应该给出默认值:650000?例如*id generator:'assigned',column:'zid',type:'long',默认值:650000**,因为我设置了**id generator:'assigned',但它不起作用