簡體   English   中英

如何告訴 Hibernate 檢索 id 而不是插入新記錄

[英]How to tell Hibernate to retrieve the id instead of inserting a new record

我的問題對某些人來說可能很愚蠢,但我不能告訴 Hibernate 檢索 ID 而不是插入新記錄。 我的問題是 Spring Boot 的 POST 方法。 例如,假設我有 3 個表:作者、書籍和書籍類型。

我發送一個像這樣的 JSON 來插入我的新書(關系配置為CascasdeType.ALL ):

{
  "book": {
    "name": "my super book",
    "author": [
      {
        "name": "Julian DESD"
      },
      {
        "name": "Maria GRATH"
      }
    ],
    "type" : {
       "name": "Fantasy"
  }
}

在我的 Book Type 表中,Fantasy 類型已經存在。 我希望休眠獲取此 ID,而不是插入帶有新 ID 的新“幻想”記錄(由於唯一性約束而觸發錯誤)。

書.java

public class Book implements Serializable {

    // Other fields 

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "BookType_idBookType")
    private BookType type;
}

圖書控制器.java

@PostMapping("/add")
public ResponseEntity<Void> addBook(@RequestBody Book book) {
   Book book1 = bookService.save(book);
   URI location = ServletUriComponentsBuilder
          .fromCurrentRequest()
          .path("/{id}")
          .buildAndExpand(book1.getId())
          .toUri();
   return ResponseEntity.created(location).build();
}

我可能缺少注釋。 請幫我。

它基於您在休眠實體類中定義的主鍵。 1)如果主鍵生成策略是自動那么你必須編寫代碼來獲取記錄然后更新記錄 2)如果主鍵是名稱那么它將根據數據庫中的可用性插入/更新記錄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM