前提・実現したいこと
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です。
どのコードが参考になるのか分からないため、自分で書いた部分を掲載しましたが、他のソースファイルなど必要な情報があれば仰ってください
お手数ですがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/06 07:54 編集