gpt4 book ai didi

java - Spring hibernate CrudRepository 使保存方法基于唯一约束更新

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:36 25 4
gpt4 key购买 nike

我知道默认情况下 CrudRepository.save 方法基于主键插入和更新。

考虑以下实体

@Entity
public class BookEntity {
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

@Basic
@Column(name = "isbn", unique = true)
private String isbn;

@Basic
@Column(name = "title")
private String title;

@Basic
@Column(name = "author")
private String author;

@Basic
@Column(name = "publication_date")
private Date publicationDate;

@Basic
@Column(name = "rank")
private Integer rank;
}

因为我不能在表中有相同 isbn 的书,而且我不想担心生成 id,所以我通常将以下 json 发布到 enpoint


{
"isbn": "10932011",
“标题”:“哈利”,
“作者”:“jk”,
"出版日期": "2018-10-10",
“等级”:1000
}

使用自动生成的 id 返回以下内容

{
“编号”:3,
"isbn": "10932011",
“标题”:“哈利”,
“作者”:“jk”,
“出版日期”:“2018-10-10T00:00:00.000 + 0000”,
“等级”:1000
}

如果我使用同一个 isbn 进行第二次调用,我会得到一个约束错误


{
"isbn": "10932011",
“标题”:“哈利”,
"作者": "jk3",
"出版日期": "2018-10-10",
“等级”:1000
}

但实际上我想用相同的 isbn 更新这本书,而不必在 post json 中指定自动生成的 id,因为这对我来说并不重要。有没有一种方法可以做到这一点而不必向服务类添加逻辑?

最佳答案

您可以获得BookEntity,更改它并保存它。

由于您的 isbn 是唯一的,您可以这样做:

BookEntity book = bookRepository.findByIsbn(isbn);
book.setWhateverFieldYouWant(value);
bookRepository.save(book);.

或其他解决方案

您可以在 BookRepository 中创建带有 @Query 注释的方法:

@Query("UPDATE BookEntity b SET b.whateverField = :value WHERE b.isbn = :isbn")
void updateBook(@Param("value") String value, @Param("isbn") String isbn);

并从服务调用它:

bookRepository.updateBook(value, isbn);

关于java - Spring hibernate CrudRepository 使保存方法基于唯一约束更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50874911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com