h2中的hibernate id生成器AUTO_INCREMENT和集群中的MySQL

时间:2012-06-28 15:37:47

标签: java hibernate cluster-computing auto-increment

用于测试我使用 H2数据库

对于制作它 MySQL

我认为两者都支持AUTO_INCREMENTmysql / h2),但看起来Hibernate并没有这样做。

MySQL支持

identity。精细。
H2怎么样?我应该写自己的发电机还是......? (使用org.hibernate.id.IdentifierGenerator界面作为文档says)。

我必须有一个干净的&从数据库本身获取ID(类型为long)的快速方法,因为应用程序在群集中(即一次将数据库INSERT放入数据库中)......那就是为什么increment绝对不适合我。

谢谢!

2 个答案:

答案 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,它被使用。

通过这种方式,您可以为不同的数据库类型使用相同的映射文件(至少只要表名和列名相同)。