Spring BootのJPAでテーブルをエンティティから自動生成する方法

Spring BootのJPAでテーブルをエンティティから自動生成する方法

JPAのエンティティからテーブル作成するのを実装してみました。

まず以下のような複合主キーのエンティティを作ってみます。

application.propertiesに以下を追記します。

データベース名はsampledbです。MySQL57Dialectを使用していますが以下でもいけます。

  • org.hibernate.dialect.MySQL55Dialect
  • org.hibernate.dialect.MySQL57Dialect ← 今回はこちらを使用しています(ストレージエンジンはInnoDBになります)

MariaDBの場合は以下のどちらかにする必要があります。

  • org.hibernate.dialect.MariaDBDialect
  • org.hibernate.dialect.MariaDB53Dialect

spring.jpa.hibernate.ddl-auto=createと指定することによってSpring Bootアプリケーション起動時にテーブル作成してくれます。

spring.jpa.show-sql=trueを指定すると、コンソールにログが出力されます。

テーブル文字コードがlatin1になるのでuseUnicode=yes&characterEncoding=UTF-8を追記したけどlatin1のままなので、my.iniの

  • default-character-set=utf-8
  • character-set-server=utf8

にしてMySQLを再起動してもうまくいきませんでした。

なのでとりあえず

としてDB作成します。文字コードを確認します。

PostgreSQLで確認

PostgreSQLで確認します。

application.ymlです。

spring:
jpa:
database: POSTGRESQL
hibernate:
ddl-auto: create
show-sql: true
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/testdb
username: postgres
password: postgres

view raw
application.yml
hosted with ❤ by GitHub

テーブルに対応するエンティティを作成します。

このエンティティクラスでは@Entityアノテーションでテーブル名を指定して作成し、@Indexアノテーションでユニークインデックスを作成しています。

カラム名を@Columnアノテーションで省略した場合は、変数名がカラム名となります。

package jp.co.confrage.domain.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.Table;
import lombok.Data;
@Data
@Entity
@Table(
name = "employee",
indexes = @Index(name = "employee_index", columnList = "name,age", unique = true))
public class Employee {
@Id private Long id;
private String name;
private Integer age;
}

view raw
Employee.java
hosted with ❤ by GitHub

コンソールログです。

Not Null制約を付けたい場合は、@Column(nullable = false)をフィールドに付与するとNot Null制約がつきます。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA