我现在正在进行的工作要求用户在创建记录时可以定义id(主键)。但是,只要提供了id,保存过程就会变为更新而不是插入。
详情如下, 技术:Groovy和Grails 1,Hibernate 3。 组态: myclass.hbm.xml,我更改了id 从
<id name="id" type="long" column="MY_ID" unsaved-value="null">
<generator class="sequence">
<param name="sequence">my_id_seq</param>
</generator>
</id>
到
<id name="id" type="long" column="MY_ID" unsaved-value="null">
<generator class="assigned">
</generator>
</id>
在模型类MyClass.groovy中,我明确地将id定义为属性。
我有show_sql为true。当id被排序并且我让它自动生成时,我可以看到打印出的insert语句并在表中找到记录。在id被分配并且我分配(新的)之后,它总是打印更新。
希望信息清晰且足以提供帮助..
答案 0 :(得分:1)
不要为unsaved-value
id生成器指定assigned
属性。
默认情况下,unsaved-value
id生成器的assigned
为undefined
,我不建议更改它。在您当前的id生成器定义中,您基本上告诉Hibernate在id字段中具有null
值的对象是瞬态的而其他对象则不是。因此,具有非null id的对象永远不会被视为瞬态。
答案 1 :(得分:0)
如果你愿意,可以这样使用。
<hibernate-mapping package="your-package">
<class name="Sequence" table="sequence">
<id name="id" type="long">
<generator class="increment"/>
在上述情况下,默认情况下它将从1开始。 顺序: - 对于从1开始的序列,但您也可以在创建表时指定任何其他数字。