Hibernate总是更新,但在分配id时不插入新记录

时间:2016-02-09 23:58:24

标签: hibernate grails

我现在正在进行的工作要求用户在创建记录时可以定义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被分配并且我分配(新的)之后,它总是打印更新。

希望信息清晰且足以提供帮助..

2 个答案:

答案 0 :(得分:1)

不要为unsaved-value id生成器指定assigned属性。

默认情况下,unsaved-value id生成器的assignedundefined,我不建议更改它。在您当前的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开始的序列,但您也可以在创建表时指定任何其他数字。