Oracle10方言
Oracle10gDialectの場合 この構成を使用する
@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;
Hibernateはテーブルとシーケンスを作成します:
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) not null,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
create sequence hibernate_sequence
保存中に、最初に新しいシーケンスIDを取得してから、INSERT
に渡します。 ステートメント
select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)
Oracle12方言
Oracle 12を使用する場合 IDENTITY column
Oracle12cDialectにアップグレードすることをお勧めします (これにはHibernate 5.3が必要であることに注意してください)
strategy
を設定します GenerationType.IDENTITY
へ
@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;
次のテーブルが作成されます-重要な部分はgenerated as identity
これは、固有のビューを提供します。明示的なsequence
はないことに注意してください。 作成する必要があり、内部で管理されます。
create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity,
VALUE varchar2(255 char),
primary key (MY_PRIMARY_KEY))
保存中、INSERTでIDは渡されません 、Oracleによって割り当てられ、セッションに戻されます
insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ?
Oracle 10とは異なり、データベースへのラウンドトリップを1回節約できることに注意してください。