[JPA错误]javax.persistence.EntityNotFoundException: Unable to find xxx
根本原因:由于后来加上的实体、对象在之前的数据没有关联上,所以造成脏数据、故根本的解决方法,就是将之前的测试数据删除,重新添加数据就行了。
问题原因:
无论是@OneToOne 还是@ManyToOne,出现这个原因都是因为子表(被关联表)中没有主表(关联表)中ID所对应的记录。
解决办法:
1. 检查为什么子表中没有主表中ID对应的记录
2. 如果子表中没有主表ID对应的记录也可以正常加载数据,那么需要在主表字段上加一个@NotFound Annotation。示例如下:
@OneToOne(optional=false)
@JoinColumn(name="business_id")
@NotFound(action=NotFoundAction.IGNORE)
private Business business;
这样,当子表中没找到数据时,主表中对应的field就是null,而不会报错了。
从hibernate源码看@NotFound Annotation:
记得NotFound(action=NotFoundAction.IGNORE)会导致Fetch无效,这样的话无论你设置fetchType是lazy还是eager都会以eager加载,一开始我开始模糊的记住,但是过不了2天就会忘,今天有个任务也是配Ignore的,索性就看看里面到底是怎么整的,下面把发现的贴出来:
先看org.hibernate.type.ManyToOneType
- public class ManyToOneType extends EntityType {
- private final boolean ignoreNotFound;
- public ManyToOneType(String className) {
- this( className, false );
- }
- public ManyToOneType(String className, boolean lazy) {
- super( className, null, !lazy, true, false );
- this.ignoreNotFound = false;
- }
这里可以清楚的看到对ManyToOneType来说 默认的是eager加载(前两个红色标注),ignoreNotFound是false,也就是说默认的NotFound不是ignore,即是Exception。
好的,接着往下看org.hibernate.impl.SessionImpl的internalLoad方法:
- public Object internalLoad(String entityName, Serializable id, boolean eager, boolean nullable) throws HibernateException {
- // todo : remove
- LoadEventListener.LoadType type = nullable ?
- LoadEventListener.INTERNAL_LOAD_NULLABLE :
- eager ? LoadEventListener.INTERNAL_LOAD_EAGER : LoadEventListener.INTERNAL_LOAD_LAZY;
- LoadEvent event = new LoadEvent(id, entityName, true, this);
- fireLoad(event, type);
- if ( !nullable ) {
- UnresolvableObjectException.throwIfNull( event.getResult(), id, entityName );
- }
- return event.getResult();
- }
这里假设你ManyToOne上设置的是NotFoundAction.IGNORE,ignoreNotFound这个属性就会设置为true,掉这个方法时传进来的boolean nullable就是true,这是大前提。
看红色字体的三目运算符,a?b:c,计算规则,先计算a,a为true的话计算b的值返回,a为false计算c的值返回。对a?b:c?d:e这个有点复杂,可以这样换算a?b(c?d:e).也就是说a为false的话计算c?d:e的值返回。
由于nullable是true,咱们就看INTERNAL_LOAD_NULLABLE 这几个常量的值。
下面看org.hibernate.event.LoadEventListener:
- public static final LoadType INTERNAL_LOAD_EAGER = new LoadType("INTERNAL_LOAD_EAGER")
- .setAllowNulls(false)
- .setAllowProxyCreation(false)
- .setCheckDeleted(false)
- .setNakedEntityReturned(false);
- public static final LoadType INTERNAL_LOAD_LAZY = new LoadType("INTERNAL_LOAD_LAZY")
- .setAllowNulls(false)
- .setAllowProxyCreation(true)
- .setCheckDeleted(false)
- .setNakedEntityReturned(false);
- public static final LoadType INTERNAL_LOAD_NULLABLE = new LoadType("INTERNAL_LOAD_NULLABLE")
- .setAllowNulls(true)
- .setAllowProxyCreation(false)
- .setCheckDeleted(false)
- .setNakedEntityReturned(false);
这里看到 .setAllowProxyCreation(false) 也就是代理创建false,这样话就不是懒加载!!!看到设置为lazy的是.setAllowProxyCreation(true),设置为eager的是.setAllowProxyCreation(false),基本能说明eager不创建代理,lazy是代理加载
最后再贴段代码证明哪里调用这布尔值:
org.hibernate.event.def.DefaultLoadEventListener
的proxyOrLoad方法:
- if ( options.isAllowProxyCreation() ) {
- return createProxyIfNecessary( event, persister, keyToLoad, options, persistenceContext );
- }
- else {
- // return a newly loaded object
- return load(event, persister, keyToLoad, options);
- }
- }
看hibernate上的注解写的很清楚,如果AllowProxyCreation这布尔值为false的话会返回一个新的加载对象!
详细错误
javax.persistence.EntityNotFoundException:Unable to find com.duona.base.bean.Business with id 1 org.hibernate.ejb.Ejb3Configuration$Ejb3EntityNotFoundDelega<wbr>te.handleEntityNotFound(Ejb3Configuration.java:155)org.hibernate.event.internal.DefaultLoadEventListener<wbr>.load(DefaultLoadEventListener<wbr>.java:210)org.hibernate.event.internal.DefaultLoadEventListener<wbr>.proxyOrLoad(DefaultLoadEventListener<wbr>.java:260)org.hibernate.event.internal.DefaultLoadEventListener<wbr>.onLoad(DefaultLoadEventListener<wbr>.java:148)org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1075) org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1002) org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:613) org.hibernate.type.EntityType.resolve(EntityType.java:441) org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:168)org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:134)org.hibernate.loader.Loader.initializeEntitiesAndCol<wbr>lections(Loader.java:999)org.hibernate.loader.Loader.doQuery(Loader.java:878) org.hibernate.loader.Loader.doQueryAndInitializeNonL<wbr>azyCollections(Loader.java:293)org.hibernate.loader.Loader.doList(Loader.java:2382) org.hibernate.loader.Loader.doList(Loader.java:2368) org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2198) org.hibernate.loader.Loader.list(Loader.java:2193) org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470) org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)org.hibernate.internal.SessionImpl.list(SessionImpl.java:1244) org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:257) com.duona.base.dao.impl.AbstractBaseDaoImpl.query(AbstractBaseDaoImpl.java:146)com.duona.base.service.impl.CashTicketServiceImpl.queryCashTickets(CashTicketServiceImpl.java:144)com.duona.base.web.admin.action.CashTicketAdminAction.searchCashTicketListUI(CashTicketAdminAction.java:82)sun.reflect.NativeMethodAccessorImpl<wbr>.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl<wbr>.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessor<wbr>Impl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453)com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255)org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.DefaultWorkflowIntercept<wbr>or.doIntercept(DefaultWorkflowIntercept<wbr>or.java:176)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)org.apache.struts2.interceptor.validation.AnnotationValidationInte<wbr>rceptor.doIntercept(AnnotationValidationInte<wbr>rceptor.java:68)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.ConversionErrorIntercept<wbr>or.intercept(ConversionErrorIntercept<wbr>or.java:138)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.StaticParametersIntercep<wbr>tor.intercept(StaticParametersIntercep<wbr>tor.java:190)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterce<wbr>ptor.intercept(ScopedModelDrivenInterce<wbr>ptor.java:141)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)org.apache.struts2.interceptor.ServletConfigInterceptor<wbr>.intercept(ServletConfigInterceptor<wbr>.java:164)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.opensymphony.xwork2.interceptor.ExceptionMappingIntercep<wbr>tor.intercept(ExceptionMappingIntercep<wbr>tor.java:187)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)com.duona.base.web.interceptor.TransactionInterceptor.intercept(TransactionInterceptor.java:17)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:511)org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteF<wbr>ilter.doFilter(StrutsPrepareAndExecuteF<wbr>ilter.java:91)com.duona.base.web.fifter.PrepareFilter.doFilter(PrepareFilter.java:67)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)org.apache.coyote.AbstractProtocol$AbstractConnectionHandle<wbr>r.process(AbstractProtocol.java:585)org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1770)java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source)
[JPA错误]javax.persistence.EntityNotFoundException: Unable to find xxx相关推荐
- [JPA] javax.persistence.EntityNotFoundException: Unable to find XXXX with id 0
[JPA] javax.persistence.EntityNotFoundException: Unable to find XXXX with id 0 解决办法是: 原因: 无论是@OneToO ...
- spring boot: javax.persistence.PersistenceException: Unable to build Hibernate SessionFactory
报错信息: Exception encountered during context initialization - cancelling refresh attempt: org.springfr ...
- WebSphere 7和javax / persistence / OneToMany.orphanRemoval()错误
问题 在Hibernate开发中,包含带有JPA @OneToMany批注的模型类: @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZ ...
- Spring Data JPA 从入门到精通~javax.persistence概况介绍
虽然 Spring Data JPA 已经对数据的操作封装的很好了,约定大于配置的思想,帮我们默认了很多东西.JPA(Java 持久性 API)是存储业务实体关联的实体的来源,它显示了如何定义一个面向 ...
- SpringBoot—JPA: javax.persistence.TransactionRequiredException
问题 void deleteBy(int id); jpa调用deleteBy或者update时,抛异常Executing an update/delete query; nested excep ...
- java运行错误java.lang.NoSuchMethodError: javax.persistence.OneToOne.orphanRemoval()Z
错误内容 log4j:WARN No appenders could be found for logger (org.jboss.logging). log4j:WARN Please initia ...
- java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z错误
使用spring + hibernate annotations的@OneToMany 一对多双向关联后出现异常: java.lang.NoSuchMethodError: javax.persis ...
- OneToOne注解 javax.persistence.OneToMany.orphanRemoval()Z错误
解决办法汇总:java.lang.NoSuchMethodError:javax.persistence.OneToMany.orphanRemoval()Z 今天用了OneToOne注解,结果报异常 ...
- 金蝶中间件AAS部署应用报错之:java.lang.ClassNotFoundException: javax.persistence.SynchronizationType
在金蝶中间件AAS应用服务器上部署SpringBoot应用时遇到部署不成功的情况,发现控制台报错信息具体如下: apusic.web.webtool.war./admin-HTTPHandler-5- ...
- java.lang.NoSuchMethodError: javax.persistence.One
2019独角兽企业重金招聘Python工程师标准>>> 这个问题要把我给整魔疯了,终于找到解决的方案了!!!!!!!!!!!!!!!!! 在javaee项目里集成了hibernate ...
最新文章
- centos php pdo mysql_mysql - CentOS6.5下php无法使用pdo - Pho
- MyBatis自动生成工具,开发编码好帮手
- 【Flutter】Flutter 开发环境搭建 ( 2021年08月25日 补充最新资料 | 最新安装教程 )
- ABAP性能优化之向内表添加纪录
- Forrester 首席分析师对话阿里云容器服务负责人:容器的未来趋势是什么?
- 发布一个Easy Linux 版本,正式命名为EzLinux
- 用SpriteBuilder简化quot;耕牛遍地走quot;的动画效果(二)
- oracle 数据分页功能,Oracle数据库实现分页功能
- 苹果推出Find My Friends好友追踪iOS应用
- 为SQL Server创建基于“智能”触发器的审核跟踪
- Leading and Trailing LightOJ - 1282
- 简单好用的桌面隐藏工具:Desktop Curtain for Mac
- 视频教程-金蝶K3 WISE 视频教程-ERP
- 有源码如何搭建网站(从零开始搭建教程)
- 苹果CMS自动定时采集教程
- 计算机无法进入操作系统怎么办,老司机教你电脑开机无法进入系统怎么办
- 读《费曼学习法》有感
- 2019-9-2-win10-uwp-截图-获取屏幕显示界面保存图片
- Token登录验证(附图)
- lab值意义_lab是什么意思?
热门文章
- 常用计算机病毒防治办法,计算机病毒防治方法
- 不忘来时路 心系梦归处
- 俄罗斯的程序员工资高吗?
- 解决vue项目在ie浏览器下白屏问题;ie运行项目报正在兼容性是图中运行,因为选中了“在兼容性视图中显示Intranet站点”
- 从kubernetes看如何设计超大规模资源调度系统
- 阿里云服务器的80端口被封了么?
- java doc字数_word怎么看不算标点的字数(word统计字数去掉符号)
- mcinabox运行库下载_mcinabox运行库官方版下载_mcinabox运行库 v20200328官方版 - Win7旗舰版...
- C语言if语句的基本用法
- [每日一题]10、一道关于九宫格的面试题