由JPA 的一个错误引起的 java.util.NoSuchElementException: null

程序报:

java.util.NoSuchElementException: null

 

这是List 的错误,因为使用的JPA,所以首先怀疑是数据库表的字段数量和Java entity 的成员数量不一致。

数了一下,两者的数量是一直的。这种猜想失败。

跟踪到List的代码里,打断点,发现是处理第二个参数的时候,就挂了。这样问题就定位出来了。

 

    public List<Follow> findByUserUnionId(String unionId) {
        return dao.findByUserUnionId(unionId,0);
    }

调用了的dao的代码:

 

List<Follow> findByUserUnionId(String userUnionId,Integer delFlag);

正确的应该是:

 

List<Follow> findByUserUnionIdAndDelFlag(String userUnionId,Integer delFlag);

 

方法名体现属性,和传的参数一定要一致

 

在编写代码的时候,少了 AndDelFlag , 但参数实际是传了两个,这样在处理的时候就直接报错了。

这个问题比较隐蔽,因为编译是没有任何错误的。运行的时候虽然报了这个错误,但怎么看都没问题。

所以,个人觉得,复杂的情况下,对于JPA 来说,还是使用 @Query 注解比较好,如果出错了,会同时报SQL的错误,这就好定位问题了。

 

 


 

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: EntityManagerFactory is closed at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at org.flowable.common.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:56) at org.flowable.common.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30) at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:56) at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:51) at org.flowable.common.engine.impl.query.AbstractQuery.list(AbstractQuery.java:117) at org.flowable.eventregistry.impl.management.DefaultEventRegistryChangeDetectionManager.detectChanges(DefaultEventRegistryChangeDetectionManager.java:50) at org.flowable.eventregistry.impl.management.EventRegistryChangeDetectionRunnable.run(EventRegistryChangeDetectionRunnable.java:35) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:308) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值