簡體   English   中英

集群中的h2和MySQL上的休眠ID生成器AUTO_INCREMENT

[英]hibernate id generator AUTO_INCREMENT at h2 and MySQL in a cluster

為了進行測試,我使用的是H2數據庫

對於生產,它是MySQL

我強調說兩者都支持AUTO_INCREMENTmysql / h2 ),但是似乎Hibernate不能以這種方式工作。

MySQL支持identity 精細。
H2呢? 我應該編寫自己的生成器還是...? (使用org.hibernate.id.IdentifierGenerator接口作為DOC 表示 )。

我必須有一種干凈整潔的好方法來從數據庫本身獲取ID( long是類型),因為應用程序位於群集中 (即,多個服務器一次INSERT數據庫)...這就是為什么increment是絕對不適合我。

謝謝!

您應該只用@GeneratedValue注釋需要生成值的id屬性。 這將自動為您使用的數據庫選擇適當的生成策略。 有關更多詳細信息,請參見GenerationType.AUTO

您的媒體資源將如下所示:

@Id
@GeneratedValue
private long id;

例如,使用本地生成器

<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,將使用該sequence

這樣,您可以對不同的數據庫類型使用相同的映射文件(至少只要表名和列名相同)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM