3

对于测试,我使用的是H2 数据库

对于生产,它是MySQL

我理解两者都支持AUTO_INCREMENTmysql / h2),但似乎 Hibernate 不能以这种方式工作。

identityMySQL 支持。美好的。
H2呢?我应该编写自己的生成器还是...?(使用文档org.hibernate.id.IdentifierGenerator的界面)。

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

谢谢!

4

2 回答 2

5

您应该只用 @GeneratedValue 注释需要生成值的 id 属性。这将自动为您正在使用的数据库选择适当的生成策略。有关GenerationType.AUTO更多详细信息,请参阅。

您的属性将如下所示:

@Id
@GeneratedValue
private long id;
于 2012-06-28T15:56:48.457 回答
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,它被使用。

In that way you can use the same mapping file for different database types (at least as long as the table and column names are the same).

于 2012-06-29T06:28:14.637 回答