83445


insertの際にIDが重複しているかいないかの確認がしたいです。

現在ソースは下のようになっておりますが、何故か重複していない値をいれても重複していますとHTMLで表示されてしまいます。

この画像の重複をクリックするとHTMLに遷移して、重複しています、または重複していませんが表示されます。

[![画像の説明をここに入力](https://i.stack.imgur.com/Hu4Zf.png)](https://i.stack.imgur.com/Hu4Zf.png)

* * *

サービスクラス

[code]

    public User doubleCheck(String id) {
    
        User u = userRepository.getById(id);
    
        if (u.getId().equals(id)) {
        //if (null != u) {
            return u;
        }
        return null;
    }
    
[/code]

[code]

    @Repository
    public interface UserRepository extends JpaRepository<User,String>{
    
      List<User> findBynameLike(String name);
    
[/code]

[code]

    @PostMapping("double")
      String DoubleCheck(@RequestParam String id,
    Model model) {
    
        User u = sevi.doubleCheck(id);
        //model.addAttribute("u", u);
        if (null != u) {
            String msg = "重複してるよ";
            model.addAttribute("msg", msg);
            return "double";
        }
        String msg2 = "重複してないよ";
        model.addAttribute("msg2", msg2);
        return "double";
    }
    
[/code]

[code]

    </head>
    <body>
    <span th:text=${msg}></span>
    <span th:text=${msg2}></span>
    </body>
    </html>
    
[/code]

サービスクラスを以下の様にしましたら  
いけました。アドバイスありがとうございました。

[code]

      public User doubleCheck(String id) {
        try {
          User u = userRepository.getById(id);
          u.getName();
          return u;
        } catch (Exception e) {
          return null;
        }
    
[/code]


CC BY-SA 4.0
2021-11-05T03:59:14.813
83436
2021-11-05T22:47:44.480
2021-11-05T13:58:36.387
48204
48204
question
java mysql spring-boot
IDの重複チェック


  * 引数に指定した `id` を持つ `User` が既に登録されている場合はその `User` を返す
  * まだ登録されていない場合は `null` を返す

という仕様ならば、次の実装で良いかと思います:

[code]

        public User doubleCheck(String id) {
            return userRepository.getById(id);
        }
    
[/code]

重複登録時に何か追加で処理をしようとしているのであれば、最初に `getById` の戻り値の `null` チェックを行うのが良いでしょう:

[code]

        public User doubleCheck(String id) {
            User u = userRepository.getById(id);
            if (u == null) {
                return null;
            }
    
            // 追加の処理
            // ...
    
            return u;
        }
    
[/code]

単に真偽値を返せばよいのなら `existsById` も利用できます:

[code]

        public boolean doubleCheck(String id) {
            // id が既に存在しているのなら(つまり、重複登録しようとしているのなら) true
            return userRepository.existsById(id);
        }
    
[/code]


CC BY-SA 4.0
2021-11-05T22:40:52.577
83445
2021-11-05T22:47:44.480
2021-11-05T22:47:44.480
2808
2808
83436
answer