关于spring boot中关于解决javax.persistence.EntityNotFoundException的异常

最近初学了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/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值