Jpa Composite Key Auto Generated
It’s clear that the JPA select sequence as a primary key strategy for generating a primary keys. In general Auto generation may expect a database resource to exist, or it may attempt to create one. A vendor may provide dcoumention on how to create such resources in the event that it doesn’t support schema generation or cannot create schema resource at runtime. In this article, we’ll learn how to use Composite Primary Key and the corresponding annotations in JPA. A composite primary key is formed by the combination of two or more java types and it is mapped to corresponding columns in the database. Dec 13, 2018 In this Spring Data JPA Composite Key with @EmbeddedId tutorial we first saw what is Primary Key and why it is important. We also saw why some tables can’t have a unique column and something, why having a auto-generated id won’t help in searches. Dec 13, 2018 In this Spring Data JPA Composite Key with @EmbeddedId tutorial we first saw what is Primary Key and why it is important. We also saw why some tables can’t have a unique column and something, why having a auto-generated id won’t help in searches. A primary key class must be defined to represent a composite primary key. Composite primary keys typically arise when mapping from legacy databases when the database key is comprised of several columns. The EmbeddedId and IdClass annotations are used to denote composite primary keys. See sections 9.1.14 and 9.1.15.
JPAにおいて、@GeneratedValue
を使って主キーにユニークな値を自動で生成し、@Id
を持つフィルドに適用できます。この主キーの値を生成するために、以下4種類の方法があります。
・GenerationType.IDENTITY
・GenerationType.SEQUENCE
・GenerationType.TABLE
・GenerationType.AUTO
DBMS毎にそれらの違いを検証して見ました。
検証環境
- Spring Boot 1.4.3.RELEASE
- PostgreSQL 9.3.15
- MySQL Community Server 5.7.17
- Oracle Database Express Edition 11g Release 2
GenerationType.IDENTITY
テーブルのidentity列を利用して,主キー値を生成します。
PostgreSQLの場合は、関連するテーブルのカラムタイプを SERIAL にする必要があります。
MySQLの場合は、カラムの属性にAUTO_INCREMENTを指定する必要があります。
Oracleは、GenerationType.IDENTITY
をサポートしていません。
GenerationType.SEQUENCE
データベースのシーケンスオブジェクトを使用して,主キー値を生成します。
PostgreSQLの場合は、sequenceName
に指定されているシーケンスオブジェクトが必要です。
MySQLはシーケンスをサポートしないため、GenerationType.SEQUENCE
を利用できません。
Oracleは、PostgreSQLと同様に指定されているシーケンスオブジェクトが必要です。
GenerationType.TABLE
主キー値を保持しておくためのテーブルを使用して,主キー値を生成します。 /world-of-warcraft-warlords-of-draenor-game-key-generator.html.
PostgreSQL、MySQLとOracleは何れも対応しているし、指定されているテーブルオブジェクトを作成する必要があります。
GenerationType.AUTO
データベースごとに異なる方法を選択し,主キー値を生成します。
PostgreSQLの場合は、シーケンスオブジェクトhibernate_sequenceを使います。このシーケンスが存在しない場合、org.postgresql.util.PSQLException: ERROR: リレーション'hibernate_sequence'は存在しません
のエラーメッセージが表示されます。
Definition Of Composite Key
MySQLの場合は、GenerationType.IDENTITY
と同じの動きをします。カラムの属性にAUTO_INCREMENTが指定されていない場合にjava.sql.SQLException: Field 'userid' doesn't have a default value
のエラーメッセージが表示されます。
Jpa Composite Key Auto Generated Calculator
Oracleの場合は、PostgreSQLと同じく、シーケンスオブジェクトhibernate_sequenceが使用されます。