我有一个Java对象,其字段需要在数据库中自动递增。该字段不是主键,只是需要自动递增的字段。
我的问题是在执行session.save(Object)之前我需要在Java对象中设置此字段的值是多少?我必须将其设置为NULL吗?
Hibernate映射如何查找此字段?这就是我所拥有的,但它不起作用:
<property name="reportNum" type="java.lang.Long">
<column name="REPORTNUM"/>
<generator class="increment"/>
</property>
此外,应用程序还需要支持MySQL和SQL Server。
提前谢谢。答案 0 :(得分:1)
我会尽量保持简单,只需使用 insert = false,update = false 属性标记属性。在将@Generated注释与命名查询一起使用之前,我遇到了麻烦,但是insert / update = false总是像宣传的那样工作。
答案 1 :(得分:0)
您不能将<generator>
用于非id
字段。我可以在这里想到两种可能的解决方案。
拥有数据库生成的属性(使用自动增量列 1 或触发器)并将其映射为生成的属性(请参阅5.6. Generated properties):
<property name="reportNum" type="java.lang.Long" generated="insert">
<column name="REPORTNUM"/>
</property>
这告诉Hibernate在insert上生成给定的属性值(Hibernate将在插入后读取它以对实体赋值)。
创建仅具有ID属性的实体。当您需要新值时,只需创建一个新实例并将其保存到数据库中。然后,在实体中设置生成的ID。
1 免责声明:我没有检查非pk列是否可行。