根本原因:由于后来加上的实体、对象在之前的数据没有关联上,所以造成脏数据、故根本的解决方法,就是将之前的测试数据删除,重新添加数据就行了。

问题原因:

无论是@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

[java] view plaincopy
  1. public class ManyToOneType extends EntityType {
  2. private final boolean ignoreNotFound;
  3. public ManyToOneType(String className) {
  4. this( className, false );
  5. }
  6. public ManyToOneType(String className, boolean lazy) {
  7. super( className, null, !lazy, true, false );
  8. this.ignoreNotFound = false;
  9. }

这里可以清楚的看到对ManyToOneType来说 默认的是eager加载(前两个红色标注),ignoreNotFound是false,也就是说默认的NotFound不是ignore,即是Exception。

好的,接着往下看org.hibernate.impl.SessionImpl的internalLoad方法:

[java] view plaincopy
  1. public Object internalLoad(String entityName, Serializable id, boolean eager, boolean nullable) throws HibernateException {
  2. // todo : remove
  3. LoadEventListener.LoadType type = nullable ?
  4. LoadEventListener.INTERNAL_LOAD_NULLABLE :
  5. eager ? LoadEventListener.INTERNAL_LOAD_EAGER : LoadEventListener.INTERNAL_LOAD_LAZY;
  6. LoadEvent event = new LoadEvent(id, entityName, true, this);
  7. fireLoad(event, type);
  8. if ( !nullable ) {
  9. UnresolvableObjectException.throwIfNull( event.getResult(), id, entityName );
  10. }
  11. return event.getResult();
  12. }

这里假设你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:

[java] view plaincopy
  1. public static final LoadType INTERNAL_LOAD_EAGER = new LoadType("INTERNAL_LOAD_EAGER")
  2. .setAllowNulls(false)
  3. .setAllowProxyCreation(false)
  4. .setCheckDeleted(false)
  5. .setNakedEntityReturned(false);
  6. public static final LoadType INTERNAL_LOAD_LAZY = new LoadType("INTERNAL_LOAD_LAZY")
  7. .setAllowNulls(false)
  8. .setAllowProxyCreation(true)
  9. .setCheckDeleted(false)
  10. .setNakedEntityReturned(false);
  11. public static final LoadType INTERNAL_LOAD_NULLABLE = new LoadType("INTERNAL_LOAD_NULLABLE")
  12. .setAllowNulls(true)
  13. .setAllowProxyCreation(false)
  14. .setCheckDeleted(false)
  15. .setNakedEntityReturned(false);

这里看到 .setAllowProxyCreation(false) 也就是代理创建false,这样话就不是懒加载!!!看到设置为lazy的是.setAllowProxyCreation(true),设置为eager的是.setAllowProxyCreation(false),基本能说明eager不创建代理,lazy是代理加载

最后再贴段代码证明哪里调用这布尔值:

org.hibernate.event.def.DefaultLoadEventListener 

的proxyOrLoad方法:

[java] view plaincopy
  1. if ( options.isAllowProxyCreation() ) {
  2. return createProxyIfNecessary( event, persister, keyToLoad, options, persistenceContext );
  3. }
  4. else {
  5. // return a newly loaded object
  6. return load(event, persister, keyToLoad, options);
  7. }
  8. }

看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相关推荐

  1. [JPA] javax.persistence.EntityNotFoundException: Unable to find XXXX with id 0

    [JPA] javax.persistence.EntityNotFoundException: Unable to find XXXX with id 0 解决办法是: 原因: 无论是@OneToO ...

  2. spring boot: javax.persistence.PersistenceException: Unable to build Hibernate SessionFactory

    报错信息: Exception encountered during context initialization - cancelling refresh attempt: org.springfr ...

  3. WebSphere 7和javax / persistence / OneToMany.orphanRemoval()错误

    问题 在Hibernate开发中,包含带有JPA @OneToMany批注的模型类: @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZ ...

  4. Spring Data JPA 从入门到精通~javax.persistence概况介绍

    虽然 Spring Data JPA 已经对数据的操作封装的很好了,约定大于配置的思想,帮我们默认了很多东西.JPA(Java 持久性 API)是存储业务实体关联的实体的来源,它显示了如何定义一个面向 ...

  5. SpringBoot—JPA: javax.persistence.TransactionRequiredException

    问题 void deleteBy(int id);   jpa调用deleteBy或者update时,抛异常Executing an update/delete query; nested excep ...

  6. 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 ...

  7. java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z错误

    使用spring + hibernate annotations的@OneToMany 一对多双向关联后出现异常:  java.lang.NoSuchMethodError: javax.persis ...

  8. OneToOne注解 javax.persistence.OneToMany.orphanRemoval()Z错误

    解决办法汇总:java.lang.NoSuchMethodError:javax.persistence.OneToMany.orphanRemoval()Z 今天用了OneToOne注解,结果报异常 ...

  9. 金蝶中间件AAS部署应用报错之:java.lang.ClassNotFoundException: javax.persistence.SynchronizationType

    在金蝶中间件AAS应用服务器上部署SpringBoot应用时遇到部署不成功的情况,发现控制台报错信息具体如下: apusic.web.webtool.war./admin-HTTPHandler-5- ...

  10. java.lang.NoSuchMethodError: javax.persistence.One

    2019独角兽企业重金招聘Python工程师标准>>> 这个问题要把我给整魔疯了,终于找到解决的方案了!!!!!!!!!!!!!!!!! 在javaee项目里集成了hibernate ...

最新文章

  1. centos php pdo mysql_mysql - CentOS6.5下php无法使用pdo - Pho
  2. MyBatis自动生成工具,开发编码好帮手
  3. 【Flutter】Flutter 开发环境搭建 ( 2021年08月25日 补充最新资料 | 最新安装教程 )
  4. ABAP性能优化之向内表添加纪录
  5. Forrester 首席分析师对话阿里云容器服务负责人:容器的未来趋势是什么?
  6. 发布一个Easy Linux 版本,正式命名为EzLinux
  7. 用SpriteBuilder简化quot;耕牛遍地走quot;的动画效果(二)
  8. oracle 数据分页功能,Oracle数据库实现分页功能
  9. 苹果推出Find My Friends好友追踪iOS应用
  10. 为SQL Server创建基于“智能”触发器的审核跟踪
  11. Leading and Trailing LightOJ - 1282
  12. 简单好用的桌面隐藏工具:Desktop Curtain for Mac
  13. 视频教程-金蝶K3 WISE 视频教程-ERP
  14. 有源码如何搭建网站(从零开始搭建教程)
  15. 苹果CMS自动定时采集教程
  16. 计算机无法进入操作系统怎么办,老司机教你电脑开机无法进入系统怎么办
  17. 读《费曼学习法》有感
  18. 2019-9-2-win10-uwp-截图-获取屏幕显示界面保存图片
  19. Token登录验证(附图)
  20. lab值意义_lab是什么意思?

热门文章

  1. 常用计算机病毒防治办法,计算机病毒防治方法
  2. 不忘来时路 心系梦归处
  3. 俄罗斯的程序员工资高吗?
  4. 解决vue项目在ie浏览器下白屏问题;ie运行项目报正在兼容性是图中运行,因为选中了“在兼容性视图中显示Intranet站点”
  5. 从kubernetes看如何设计超大规模资源调度系统
  6. 阿里云服务器的80端口被封了么?
  7. java doc字数_word怎么看不算标点的字数(word统计字数去掉符号)
  8. mcinabox运行库下载_mcinabox运行库官方版下载_mcinabox运行库 v20200328官方版 - Win7旗舰版...
  9. C语言if语句的基本用法
  10. [每日一题]10、一道关于九宫格的面试题