最近初学了spring-boot.2.1.5框架,虽然有视频教程,但是也遇到了不少的问题。这…不,刚就解决了一个问题。 情景如下:
javax.persistence.EntityNotFoundException: Unable to find com.sxj.domain.Book with id 29
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:162) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:230) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:265) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:124) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:92) ~[hibernate-core-5.3
我的web层的controllerde 的部分代码:
@GetMapping("/books/{id}")
public String detail(@PathVariable long id, Model model){
Book book = bookService.findOne(id);
if(book==null){
book = new Book();
}
model.addAttribute("book",book);
return "book";
}
我的service层部分代码:
/**
* 获取一条读书清单
*/
public Book findOne(long id) {
return bookRepository.getOne(id);
}
我也在网上查了很多资料,都没有解决到我这个问题的出现。最后我发现是springboot-jpa自带的getOne()有问题。然后我自己写了一个自定义的根据id查询方法:
/**
* 自定义查询
*/
@Query("select b from Book b where b.id = ?1 ")
Book findBy(long id);
}
然后在service层进行调用:
/**
* 获取一条读书清单
*/
public Book findOne(long id) {
return bookRepository.findBy(id);
}
这样问题就解决了,奇怪的是在我引用的spring boot-jpa中,没有findOne()方法,只有getOne()方法。所以只能调用一个自定义查询的方法。具体关于两个方法的不同,请参考其他资料。
参考:https://blog.csdn.net/u012462033/article/details/79466679/