javax.persistence.EntityNotFoundException: 找不到 ID 为 10000001 的 kg.library.spring.library_spring.entity.Author
javax.persistence.EntityNotFoundException: Unable to find kg.library.spring.library_spring.entity.Author with id 10000001
我是 Spring 的新手,我可能犯了最愚蠢的错误,但我无法解决这个问题超过 2 小时。按照视频教程,我做了Pagination,我做的跟他一模一样,但是他没有实体之间的关系。我认为错误出在 Author 和 Book 实体之间的一对一关系中。你能帮忙吗?
我想添加分页,因为我的 table 中有超过一百万条记录,添加分页后出现此错误。
图书实体:
@Entity
@Table(name = "books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "title")
private String title;
@Column(name = "publishing_year")
private Integer publishingYear;
@Column(name = "sell_cost")
private BigDecimal sellCost;
@Column(name = "rent_cost")
private BigDecimal rentCost;
@Column(name = "amount")
private Integer amount;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "author_id")
private Author author;
//getter and setters
作者实体:
@Entity
@Table(name = "author")
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "fullname")
private String fullname;
@Column(name = "birthday")
private Date birthday;
@OneToOne(mappedBy = "author")
private Book book;
//getters and setters
BookServiceImpl class:
@Service
public class BookServiceImpl implements BookService
{
@Autowired
private BookRepository bookRepository;
@Override
public Page<Book> findPaginated(int pageN, int pageSize,String sortField,String sortDirection) {
Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name()) ? Sort.by(sortField).ascending() :
Sort.by(sortField).descending();
Pageable pageable = PageRequest.of(pageN-1,pageSize,sort);
return bookRepository.findAll(pageable);
}
}
图书馆管理员class:
@GetMapping("/books/{pageN}")
public String getAllBooks(@PathVariable (value = "pageN") int pageN,Model model,
@RequestParam("sortField") String sortField,
@RequestParam("sortDir") String sortDir){
int pageSize = 25;
Page<Book> page = bookService.findPaginated(pageN,pageSize,sortField,sortDir);
List<Book> books = page.getContent();
model.addAttribute("currentPage",pageN);
model.addAttribute("totalPages",page.getTotalPages());
model.addAttribute("totalItems", page.getTotalElements());
model.addAttribute("books",books);
model.addAttribute("sortField",sortField);
model.addAttribute("sortDir",sortDir);
model.addAttribute("reverseSortDir",sortDir.equals("asc") ? "desc" : "asc");
return "librarian/show-all-books";
}
试试这些改变。我希望每本书只有一个作者。
Book.java:
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "author_id")
private Author author;
Author.java:
@OneToMany(mappedBy = "author")
private List<Book> books=new ArrayList<>();
您似乎有一条 Book 记录引用了 ID 为 10000001 的作者,该作者未在作者 table 中存在。
我是 Spring 的新手,我可能犯了最愚蠢的错误,但我无法解决这个问题超过 2 小时。按照视频教程,我做了Pagination,我做的跟他一模一样,但是他没有实体之间的关系。我认为错误出在 Author 和 Book 实体之间的一对一关系中。你能帮忙吗?
我想添加分页,因为我的 table 中有超过一百万条记录,添加分页后出现此错误。
图书实体:
@Entity
@Table(name = "books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "title")
private String title;
@Column(name = "publishing_year")
private Integer publishingYear;
@Column(name = "sell_cost")
private BigDecimal sellCost;
@Column(name = "rent_cost")
private BigDecimal rentCost;
@Column(name = "amount")
private Integer amount;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "author_id")
private Author author;
//getter and setters
作者实体:
@Entity
@Table(name = "author")
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "fullname")
private String fullname;
@Column(name = "birthday")
private Date birthday;
@OneToOne(mappedBy = "author")
private Book book;
//getters and setters
BookServiceImpl class:
@Service
public class BookServiceImpl implements BookService
{
@Autowired
private BookRepository bookRepository;
@Override
public Page<Book> findPaginated(int pageN, int pageSize,String sortField,String sortDirection) {
Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name()) ? Sort.by(sortField).ascending() :
Sort.by(sortField).descending();
Pageable pageable = PageRequest.of(pageN-1,pageSize,sort);
return bookRepository.findAll(pageable);
}
}
图书馆管理员class:
@GetMapping("/books/{pageN}")
public String getAllBooks(@PathVariable (value = "pageN") int pageN,Model model,
@RequestParam("sortField") String sortField,
@RequestParam("sortDir") String sortDir){
int pageSize = 25;
Page<Book> page = bookService.findPaginated(pageN,pageSize,sortField,sortDir);
List<Book> books = page.getContent();
model.addAttribute("currentPage",pageN);
model.addAttribute("totalPages",page.getTotalPages());
model.addAttribute("totalItems", page.getTotalElements());
model.addAttribute("books",books);
model.addAttribute("sortField",sortField);
model.addAttribute("sortDir",sortDir);
model.addAttribute("reverseSortDir",sortDir.equals("asc") ? "desc" : "asc");
return "librarian/show-all-books";
}
试试这些改变。我希望每本书只有一个作者。
Book.java:
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "author_id")
private Author author;
Author.java:
@OneToMany(mappedBy = "author")
private List<Book> books=new ArrayList<>();
您似乎有一条 Book 记录引用了 ID 为 10000001 的作者,该作者未在作者 table 中存在。