現在、データベースとしてmysqlを使用しており、
@Generated Value(strategy = GenerationType.IDENTITY)
特定の状況では完全に機能していますが、その時点でデータベースをOracleに移行する必要がありますが、正常に機能していません。
Oracleでどのように「適切に機能する」(それが意味するような基本情報を定義しない)のでしょうか。 AUTO
とあなたの質問との関連性はわかりません-それは単に実装が使用したいものを選択できるようにします。
「IDENTITY
」(JPA javadocsおよび仕様による-参照する必要があるもの)は、autoincrementを意味します。 Oracleにはそのような概念はありませんが、MySQL、SQLServer、および他のいくつかにはあります。私はまともなJPA実装がそのようなことをしようとしてもエラーにフラグを立てることを期待しています。
ただし、Oracleでは「SEQUENCE
」または「TABLE
」戦略を使用できます。
引用 Java Persistence/Identity and Sequencing :
Identityシーケンスは、データベースでspecial IDENTITYカラムを使用してデータベースが行が挿入されると、オブジェクトにIDを自動的に割り当てます。 ID列は、MySQL、DB2、SQL Server、Sybase、Postgresなどの多くのデータベースでサポートされています。 OracleはIDENTITY列をサポートしていませんが、シーケンスオブジェクトとトリガーを使用してシミュレートできます。
そのため、代わりに[〜#〜] sequence [〜#〜]を使用することを好みます
シーケンスオブジェクトは、特別なデータベースオブジェクトを使用してIDを生成します。シーケンスオブジェクトは、Oracle、DB2、Postgresなどの一部のデータベースでのみサポートされています。通常、SEQUENCEオブジェクトには、名前、INCREMENT、およびその他のデータベースオブジェクト設定があります。 .NEXTVALが選択されるたびに、シーケンスはインクリメントによってインクリメントされます。
例:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMP_SEQ")
@SequenceGenerator(name="EMP_SEQ", sequenceName="EMP_SEQ", allocationSize=100)
private long id;
...
}