java - 如何使用 springboot JPA 更新 API 仅更新实体中的特定字段
问题描述
这是我的代码。
实体类:
@Entity
public class Book
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long bookId;
private double bookPrice;
private String bookTitle;
private String bookAuthor;
private String bookLanguage;
private LocalDate publicationDate;
private String publisher;
private byte[] bookImage;
private long isbn;
private int bookQuantity;
控制器类:
@PutMapping("/updatebooks")
public ResponseEntity<ApiResponse> updateBook(@RequestBody BookDto bookDto)
throws DataNotFoundException
{
return ResponseEntity.ok(bookService.updateBook(bookDto));
}
服务等级:
@Override
public ApiResponse updateBook(BookDto bookDto) throws DataNotFoundException
{
Book book = bookRepository.findById(bookDto.getBookId())
.orElseThrow(() -> new DataNotFoundException("Book not found"));
book.setBookAuthor(bookDto.getBookAuthor());
book.setBookLanguage(bookDto.getBookLanguage());
book.setBookPrice(bookDto.getBookPrice());
book.setBookTitle(bookDto.getBookTitle());
book.setIsbn(bookDto.getIsbn());
book.setPublicationDate(bookDto.getPublicationDate());
book.setPublisher(bookDto.getPublisher());
bookRepository.save(book);
return new ApiResponse(HttpStatus.OK.value(), "Updation successful");
}
所以通过邮递员我只想单独更新 bookAuthor 字段,其他字段必须与数据库中的字段相同。但是当我只更新一个字段时,其他字段会自动分配为 null,我只想更新一个字段。
在这里看到我只是更新 bookAuthor 字段,但其他人只是更改为 null。那么我怎样才能只更新特定字段并显示其他字段,就像它在数据库中一样。
解决方案
@Modifying
@Query(nativeQuery = true, value = "update book set book_author = :bookAuthor where id = :bookId")
int updateBookAuthor(@Param("bookAuthor") String bookAuthor, @Param("bookId") Long bookId);
您可以在 BookRepository 中执行类似的操作,然后从服务类调用...
bookRepository.updateBookAuthor(bookAuthor, bookId)
或修改您的服务类方法,如下所示...
@Override
public ApiResponse updateBook(BookDto bookDto) throws DataNotFoundException
{
Book book = bookRepository.findById(bookDto.getBookId())
.orElseThrow(() -> new DataNotFoundException("Book not found"));
book.setBookAuthor(bookDto.getBookAuthor());
bookRepository.save(book);
return new ApiResponse(HttpStatus.OK.value(), "Updation successful");
}
推荐阅读
- sql - 在一次点击数据库中选择所有多对多记录以及父表
- c# - CacheManager 与 inproc 和 Redis 一起处理,因为背板未同步
- javascript - Javascript 删除“字符串”中的空格
- debugging - 在本地目录中找不到 .gdbinit 文件
- postgresql - 从历史数据中查询当前数据
- python - pandas groupby 多级标题
- swift - 应用内购买 - 如何仅恢复一种产品
- docker - 如何在没有 root 身份的情况下连接到远程 docker 守护进程?
- css - 内容隐藏在固定位置导航栏后面的问题
- ffmpeg-php - PHP-ffmpeg ratecontrol_init:无法打开统计文件