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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Spring Boot

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

Q&A

解決済

1回答

2658閲覧

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

terry3

総合スコア30

Java

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

Spring Boot

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

0グッド

0クリップ

投稿2018/05/06 07:33

前提・実現したいこと

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画面

console

1 2 :: Spring Boot :: (v2.0.1.RELEASE) 3(省略) 4 51. drop table customers if exists {executed in 1 msec} 62018-05-06 15:51:58.408 DEBUG 3040 --- [ main] jdbc.sqltiming : com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) 71. drop sequence if exists hibernate_sequence {executed in 1 msec} 82018-05-06 15:51:58.410 DEBUG 3040 --- [ main] jdbc.sqltiming : com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) 91. create sequence hibernate_sequence start with 1 increment by 1 {executed in 1 msec} 102018-05-06 15:51:58.414 DEBUG 3040 --- [ main] jdbc.sqltiming : com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) 111. create table customers (id integer not null, first_name varchar(255) not null, last_name varchar(255) 12not null, primary key (id)) {executed in 3 msec} 13(省略) 141. INSERT INTO customers(first_name,last_name) VALUES('Nobita', 'Nobi') {FAILED after 1 msec} 15 16org.h2.jdbc.JdbcSQLException: 列 "ID" にはnull値が許されていません 17NULL not allowed for column "ID"; SQL statement: 18insert into customers (first_name, last_name, id) values ('Hideyoshi', 'Dekishugi', null) [23502-197]

該当のソースコード

Customerクラス

java

1import javax.persistence.*; 2 3import lombok.AllArgsConstructor; 4import lombok.Data; 5import lombok.NoArgsConstructor; 6 7@Entity 8@Table(name = "customers") 9@Data 10@NoArgsConstructor 11@AllArgsConstructor 12public class Customer { 13 @Id 14 @GeneratedValue 15 private Integer id; 16 @Column(nullable = false) 17 private String firstName; 18 @Column(nullable = false) 19 private String lastName; 20}

CustomerRepositoryクラス

java

1import java.util.List; 2 3import org.springframework.data.jpa.repository.JpaRepository; 4import org.springframework.data.jpa.repository.Query; 5 6public interface CustomerRepository extends JpaRepository<Customer, Integer> { 7 8 @Query(value = "SELECT x FROM Customer x ORDER BY x.firstName, x.lastName") 9 List<Customer> findAllOrderByName(); 10}

HajibootJpaApplicationクラス

java

1import org.springframework.beans.factory.annotation.Autowired; 2import org.springframework.boot.CommandLineRunner; 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6@SpringBootApplication 7public class HajibootJpaApplication implements CommandLineRunner{ 8 9 @Autowired 10 CustomerRepository customerRepository; 11 12 @Override 13 public void run(String...strings) throws Exception{ 14 Customer created = customerRepository.save(new Customer(null,"Hideyoshi","Dekishugi")); 15 System.out.println(created + "is created!"); 16 customerRepository.findAllOrderByName().forEach(System.out::println); 17 } 18 19 public static void main(String[] args) { 20 SpringApplication.run(HajibootJpaApplication.class, args); 21 } 22}

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

sql

1INSERT INTO customers(first_name,last_name) VALUES('Nobita', 'Nobi'); 2INSERT INTO customers(first_name,last_name) VALUES('Takeshi', 'Goda'); 3INSERT INTO customers(first_name,last_name) VALUES('Suneo', 'Honekawa'); 4INSERT 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です。

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

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

投稿2018/05/06 07:49

編集2018/05/06 07:53
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

terry3

2018/05/06 07:54 編集

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問