我有一個 Spring Boot 應用程式來跟蹤書籍。Book 物體與此類似。
@Entity
@DynamicUpdate
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
public class Book implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long bookId;
@Column(nullable = false, unique = true)
private String bookName;
}
它有一個存盤庫,我可以通過它按bookName屬性洗掉一本書。
@Repository
public interface BookRepository extends JpaRepository<Book, String> {
Optional<Book> deleteByBookName(String bookName);
}
我的洗掉方法看起來像這樣。
@Transactional
public void deleteBook(String bookName) {
Optional<Book> deletedBook = bookRepository.deleteByBookName(bookName);
if (deletedBook.isEmpty()) {
throw new ResourceNotFoundException("Book Not Found");
}
}
但是,此方法不是回傳Optional<Book>型別實體,而是deleteByBookName回傳 Optional 物件,例如Optional[0],Optional[1]這些物件將洗掉的書籍計數作為值。
因此deletedBook.isEmpty(),即使洗掉了 0 本書,它也始終如此。
為什么此deleteByBookName方法回傳 Optional 中的已洗掉計數,而不是已洗掉物體?
uj5u.com熱心網友回復:
解決方案是檢查已洗掉的計數而不是已洗掉的物件。
您應該重構檢查已洗掉計數的方法,如下所示。
@Transactional
public void deleteBook(String bookName) {
Integer deletedBookCount = bookRepository.deleteByBookName(bookName);
if (deletedBookCount == null || deletedBookCount == 0) {
throw new ResourceNotFoundException("Book Not Found");
}
}
因此,更改存盤庫方法的簽名。
@Repository
public interface BookRepository extends JpaRepository<Book, String> {
Integer deleteByBookName(String bookName);
}
uj5u.com熱心網友回復:
Spring Data 在洗掉操作后不會回傳已洗掉的物件,它只能回傳已洗掉的物件 count 或void. 您也可以查看 Spring 官方檔案。
delete…By, remove…By - Delete query method returning either no result (void) or the delete count.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513990.html
