前提・実現したいこと
SpringBootとJPAでOracleのデータ登録(Insert)を作っています。
実行時にSQLのエラーがあったとき、その例外を取得したいのです。
発生している問題・エラーメッセージ
・サンプルをもとに簡単な登録はできたのですが、SQLのエラー(例外)が取得できません
・Insertでキー重複になるデータを登録しても例外が発生しません
・例外が発生しないので、ブラウザには"success"が返ります
該当のソースコード
Oracleのテーブル(MEMBERS)
ID NUMBER No 1 NAME VARCHAR2(20 BYTE) Yes 2
.
Members.java(エンティティ)
package com.example.demo; import javax.persistence.Entity; import javax.persistence.Id; import lombok.Data; @Data @Entity public class Members { @Id private Integer id; private String name; }
.
MembersService.java(サービス)
package com.example.demo; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor public class MembersService { private final MembersRepository membersRepository; public String create() { Members members = new Members(); members.setId(555555); members.setName("hansen"); membersRepository.save(members); return "success"; } } ※キー重複時でも"success"が返ります
.
MembersController(コントローラー)
package com.example.demo; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor; @RestController //@RequestMapping(value ="/members") @RequestMapping(value ="/members", method={RequestMethod.GET}) @RequiredArgsConstructor public class MembersController { private final MembersService membersService; @PostMapping public String create() { return membersService.create(); } }
試したこと
SQLを出力するよう設定しました。
具体的には・・・aoolication.propertiesに下記を記載
'#SQLログ出力 logging.level.org.hibernate.SQL=debug logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace logging.level.org.hibernate.type.EnumType=trace
- 結果 -
1.正常時のメッセージ select members0_.id as id1_0_0_, members0_.name as name2_0_0_ from members members0_ where members0_.id=? binding parameter [1] as [INTEGER] - [555555] insert into members (name, id) values (?, ?) binding parameter [1] as [VARCHAR] - [hansen] binding parameter [2] as [INTEGER] - [555555]
2.キー重複時のメッセージ select members0_.id as id1_0_0_, members0_.name as name2_0_0_ from members members0_ where members0_.id=? binding parameter [1] as [INTEGER] - [555555] ※キー重複時はInsertが実行される前にエラー?
.
Oracle内での実行結果
次のコマンドの行1の開始中にエラーが発生しました: insert into members (name, id) values ('sasasa', 555555) エラー・レポート: SQLエラー: ORA-00001: 一意制約(kkk.MEMBERS_PK)に反しています ※当然ですが、キー重複しています
開発環境
・Java 1.8.0_171
・Eclipse 4.7
・Oracle 11g
回答1件
あなたの回答
tips
プレビュー