2017-03-28 6 views
0

私はHibernate 4とOracle 11gを使用しています。そして、このデュエットには便利な機能があります。MysqlのOracle Sequenceアナログ

@Entity 
@Table(name = "APPLICATION", schema = "PRODUCTION") 
public class ApplicationVersionModel { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PRODUCTION.SEQUENCE_NEW") 
    @SequenceGenerator(name = "PRODUCTION.SEQUENCE_NEW", schema = "PRODUCTION", sequenceName = "PRODUCTION.SEQUENCE_NEW", allocationSize = 1) 
    @Column(name = "ID") 
    @XmlTransient 
    @Getter @Setter private Long id; 

をそしてDBにシーケンスを説明します:私はきれいに次のように指摘することができ

CREATED   27.02.17 
LAST_DDL_TIME 27.02.17 
SEQUENCE_OWNER PRODUCTION 
SEQUENCE_NAME SEQUENCE_NEW 
MIN_VALUE  1 
MAX_VALUE  9999999999999999999999999999 
INCREMENT_BY 1 
CYCLE_FLAG  N 
ORDER_FLAG  N 
CACHE_SIZE  20 
LAST_NUMBER  957101 
PARTITION_COUNT 
SESSION_FLAG N 
KEEP_VALUE  N 

組み合わせは私がマルチスレッド環境でアプリを使用できるようになりますようにするため

。同時に、ユーザーにアクセスすると、衝突の脅威のない一意のIDが取得されます。 The documentationはこの機能を明示的に宣言します。

そのような意味で、HibernateとMysqlのペアに類似の機能がありますか?どんな提案も高く評価されます。事前に多くの感謝。

答えて

0

シーケンスを使用して1つのテーブルのユニークIDを生成すると、MySQLのauto_incrementは同じ機能を提供します。

SOでここHow to annotate MYSQL autoincrement field with JPA annotations質問への受け入れ答えはhybernate内MySQLのAUTO_INCREMENTを使用する方法について説明します。

@Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
private Long id; 

MySQLのAUTO_INCREMENT列を使用するには、あなたは IDENTITY戦略を使用することになっています

AUTOをMySQLで使用するときに得られるもの:

@Id @GeneratedValue(strategy=GenerationType.AUTO) 
private Long id; 
012実際

@Id @GeneratedValue 
private Long id; 
と同等です