繁体   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