質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Java

    14106questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Spring Boot

    536questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Spring Bootの@GeneratedValueがうまく動かない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 415

terry3

score 20

 前提・実現したいこと

spring BootでEntityクラスでの@GeneratedValueを機能させたいのですがうまくいきません。。
実現したいことはDB(H2です。組み込みです)に入っているCustomerを名前の昇順で取得です。
ご存知の方いたらご教授お願いします。

 発生している問題・エラーメッセージ

@GeneratedValueのはずが

create table customers (id integer not null, first_name varchar(255) not null, last_name varchar(255) 
not null, primary key (id))


となりID自動採番がされません。
そのためSQLを実行しても自動採番されないためエラーとなってしまいます。

以下Console画面

 :: Spring Boot ::        (v2.0.1.RELEASE)
(省略)

1. drop table customers if exists  {executed in 1 msec}
2018-05-06 15:51:58.408 DEBUG 3040 --- [           main] jdbc.sqltiming                           :  com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95)
1. drop sequence if exists hibernate_sequence  {executed in 1 msec}
2018-05-06 15:51:58.410 DEBUG 3040 --- [           main] jdbc.sqltiming                           :  com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95)
1. create sequence hibernate_sequence start with 1 increment by 1  {executed in 1 msec}
2018-05-06 15:51:58.414 DEBUG 3040 --- [           main] jdbc.sqltiming                           :  com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95)
1. create table customers (id integer not null, first_name varchar(255) not null, last_name varchar(255) 
not null, primary key (id))  {executed in 3 msec}
(省略)
1. INSERT INTO customers(first_name,last_name) VALUES('Nobita', 'Nobi') {FAILED after 1 msec}

org.h2.jdbc.JdbcSQLException: 列 "ID" にはnull値が許されていません
NULL not allowed for column "ID"; SQL statement:
insert into customers (first_name, last_name, id) values ('Hideyoshi', 'Dekishugi', null) [23502-197]

 該当のソースコード

Customerクラス

import javax.persistence.*;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "customers")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Customer {
    @Id
    @GeneratedValue
    private Integer id;
    @Column(nullable = false)
    private String firstName;
    @Column(nullable = false)
    private String lastName;
}

CustomerRepositoryクラス

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

public interface CustomerRepository extends JpaRepository<Customer, Integer> {

    @Query(value = "SELECT x FROM Customer x ORDER BY x.firstName, x.lastName")
    List<Customer> findAllOrderByName();
}

HajibootJpaApplicationクラス

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HajibootJpaApplication implements CommandLineRunner{

    @Autowired
    CustomerRepository customerRepository;

    @Override
    public void run(String...strings) throws Exception{
        Customer created = customerRepository.save(new Customer(null,"Hideyoshi","Dekishugi"));
        System.out.println(created + "is created!");
        customerRepository.findAllOrderByName().forEach(System.out::println);
    }

    public static void main(String[] args) {
        SpringApplication.run(HajibootJpaApplication.class, args);
    }
}

src/main/resourceのところにあるdata.sqlファイル。これが最初に実行されます。

INSERT INTO customers(first_name,last_name) VALUES('Nobita', 'Nobi');
INSERT INTO customers(first_name,last_name) VALUES('Takeshi', 'Goda');
INSERT INTO customers(first_name,last_name) VALUES('Suneo', 'Honekawa');
INSERT INTO customers(first_name,last_name) VALUES('Shizuka','Minamoto');

applicatoin.propertyには以下のように記載してあります

spring.datasource.driver-class-name=net.sf.log4jdbc.DriverSpy
spring.datasource.url=jdbc:log4jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=

logging.level.jdbc=OFF
logging.level.jdbc.sqltiming=DEBUG

 補足情報(FW/ツールのバージョンなど)

JPAは0.0.1-SNAPSHOTというバージョンです
Spring Bootは2.0.1です。

どのコードが参考になるのか分からないため、自分で書いた部分を掲載しましたが、他のソースファイルなど必要な情報があれば仰ってください

お手数ですがよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

誤:@GeneratedValue
正:@GeneratedValue(strategy=GenerationType.IDENTITY)

引数は理解して指定してください。

※ AUTO_INCREMENT 非対応のRDBMSはこの限りではありませんh。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/06 16:54 編集

    解決しましたありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    14106questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Spring Boot

    536questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。