用于测试我使用 H2数据库。
对于制作它 MySQL 。
我认为两者都支持AUTO_INCREMENT
(mysql / h2),但看起来Hibernate并没有这样做。
identity
。精细。
H2怎么样?我应该写自己的发电机还是......? (使用org.hibernate.id.IdentifierGenerator
界面作为文档says)。
我必须有一个干净的&从数据库本身获取ID(类型为long
)的快速方法,因为应用程序在群集中(即一次将数据库INSERT
放入数据库中)......那就是为什么increment
绝对不适合我。
谢谢!
答案 0 :(得分:3)
您应该使用@GeneratedValue注释您的id属性,该属性需要生成的值。这将自动为您正在使用的数据库选择适当的生成策略。有关详细信息,请参阅GenerationType.AUTO
。
您的财产将如下所示:
@Id
@GeneratedValue
private long id;
答案 1 :(得分:2)
使用本机生成器,例如
<id name="id" type="int">
<column name="id_column" />
<generator class="native" >
<param name="sequence">id_column_sequence</param>
</generator>
</id>
具有类native
的生成器使用数据库的最佳生成策略。在MySql的情况下,这是auto_increment,在Oracle的情况下,这是一个序列(对于H2,它也应该是一个序列,但我从未尝试过,因为我不使用H2)。仅在有用的情况下使用生成器参数sequence
,即。即对于MySql数据库,该参数被忽略,对于Oracle,它被使用。
通过这种方式,您可以为不同的数据库类型使用相同的映射文件(至少只要表名和列名相同)。