Jpa Composite Key Auto Generated

10.12.2020by

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 にする必要があります。

Key

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が使用されます。

Comments are closed.