繁体   English   中英

多个数据库的Hibernate自动增量字段

[英]Hibernate auto increment field for multiple databases

我有一个Java对象,其字段需要在数据库中自动递增。 该字段不是主键,只是需要自动递增的字段。

我的问题是在执行session.save(Object)之前我需要在Java对象中设置此字段的值是多少? 我必须将其设置为NULL吗?

Hibernate映射将如何查找此字段? 这是我的,但它没有工作:

<property name="reportNum" type="java.lang.Long">
 <column name="REPORTNUM"/>
 <generator class="increment"/>
</property>

此外,该应用程序还需要支持MySQL和SQL Server。

提前致谢。

我会尝试保持尽可能简单,只需使用insert = false,update = false属性标记属性。 在将@Generated注释与命名查询一起使用之前,我遇到了麻烦,但是insert / update = false总是像宣传的那样工作。

您不能将<generator>用于非id字段。 我在这里可以想到两种可能的解决方案。

选项1

拥有数据库生成的属性(使用自动增量列1或触发器)并将其映射为生成的属性(请参见5.6。生成的属性 ):

<property name="reportNum" type="java.lang.Long" generated="insert">
  <column name="REPORTNUM"/>
</property>

这告诉Hibernate在insert上生成给定的属性值(并且Hibernate将在插入后读取它以对实体赋值)。

选项2

创建仅具有ID属性的实体。 当您需要新值时,只需创建一个新实例并将其保存到数据库中。 然后,在实体中设置生成的ID。

1免责声明:我没有检查非PK列是否可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM