Hibernate+Oracleによるプライマリ・キーの自己成長
概要
GenerationType.IDENTITYでは、SQL ServerとMySQLでフィールドの自己増加を実現できます.この方法ではOracleに配置できません.Oracleでは自己増加フィールドはサポートされていません.sequenceを設定するには(MySQLとSQLサーバでよく使われています).JPAのINDENTITYと同等です.
ソリューション
シーケンスの作成
Oracleでシーケンスを作成することで解決します.
またはOracle SQL Developerクライアントから直接手動で作成
シーケンスのマッピング
Hibernateでの実装方法:@SequenceGenerator(name="SEQ_Name",sequenceName="SEQ_DB_Name")パラメータ注意:SEQ_Name:SEQ_を使用するために、このSequenceの名前を指定します.DB_Name:データベース内のSequenceの名前を指定します.2つのパラメータの名前は同じでもよい.
GenerationType.IDENTITYでは、SQL ServerとMySQLでフィールドの自己増加を実現できます.この方法ではOracleに配置できません.Oracleでは自己増加フィールドはサポートされていません.sequenceを設定するには(MySQLとSQLサーバでよく使われています).JPAのINDENTITYと同等です.
ソリューション
シーケンスの作成
Oracleでシーケンスを作成することで解決します.
CREATE SEQUENCE BLACK_LIST_SEQ--
INCREMENT BY 1 --
START WITH 10000 -- 1
NOMAXVALUE --
NOCYCLE -- ,
CACHE 20;
またはOracle SQL Developerクライアントから直接手動で作成
シーケンスのマッピング
Hibernateでの実装方法:@SequenceGenerator(name="SEQ_Name",sequenceName="SEQ_DB_Name")パラメータ注意:SEQ_Name:SEQ_を使用するために、このSequenceの名前を指定します.DB_Name:データベース内のSequenceの名前を指定します.2つのパラメータの名前は同じでもよい.
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "black_list_seq")
@SequenceGenerator(name = "black_list_seq", sequenceName = "BLACK_LIST_SEQ", allocationSize = 1)
@Column(name = "ID")
private Long id;