• Struts报错ObjectNotFoundException的解决方法


    第一种,ObjectNotFoundException

    完整错误示例如下:

    Struts Problem Report
    Struts has detected an unhandled exception: 
    Messages:    •  No row with the given identifier exists: [com.ftms.entity.JPositionTown#0] 
    File:    org/hibernate/internal/SessionFactoryImpl.java
    Line number:    247
    ________________________________________
    Stacktraces
    org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.ftms.entity.JPositionTown#0] 
        org.hibernate.internal.SessionFactoryImpl$1$1.handleEntityNotFound(SessionFactoryImpl.java:247)
        org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:210)
        org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:251)
        org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
        org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1079)
        org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1006)
        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.initializeEntitiesAndCollections(Loader.java:995)
        org.hibernate.loader.Loader.doQuery(Loader.java:874)
        org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
        org.hibernate.loader.Loader.doList(Loader.java:2438)
        org.hibernate.loader.Loader.doList(Loader.java:2424)
        org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2254)
        org.hibernate.loader.Loader.list(Loader.java:2249)
        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:1248)
        org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
        com.ftms.dao.UserDAO.findByProperty(UserDAO.java:112)
        com.ftms.dao.UserDAO.findByUsername(UserDAO.java:120)
        com.ftms.dao.UserDAO$$FastClassByCGLIB$$42997a1e.invoke(<generated>)
        net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
        org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
        org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
        org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

    根据博文:https://www.cnblogs.com/crazytrip/p/5355056.html

    报错分析:

    Hibernate 的映射文件,表 A 里关联了表 B 的主键,当查询表 A 时,在 B 表里找不到对应记录时就会报错,如果只是逻辑删除不会报这种错误,只有当表 B 里测试没有 JPositionTown为 0的这条数据了才会报错 (已实际测试过);上面报错信息实体类后面【#0】表示实体类对应表 JPositionTown=0的记录找不到。也就是存在垃圾数据,可能是因为没有连带删除,或者是数据录入有误。

    解决办法:

    1. 修改配置文件加上 not-found="ignore" ”

    即:

    <many-to-one name="JPositionTown" class="com.ftms.entity.JPositionTown" fetch="select" cascade="all" lazy="false" not-found="ignore">
    <column name="town">
    <comment>住址</comment>
    </column>
    </many-to-one>

    2. 要么就把这条有问题的数据从数据库删掉。

  • 相关阅读:
    【POJ】1067 取石子游戏(博弈论)
    【POJ】2348 Euclid's Game(扩欧)
    【POJ】1061 青蛙的约会 / 【BZOJ】1477(扩欧)
    【POJ】3090 Visible Lattice Points(欧拉函数)
    【BZOJ】2190 [SDOI2008]仪仗队(欧拉函数)
    【POJ】2115 C Looooops(扩欧)
    【BZOJ】1015 [JSOI2008]星球大战starwar(并查集+离线处理)
    [BZOJ4822][Cqoi2017]老C的任务
    [BZOJ1001][BeiJing2006]狼抓兔子
    [BZOJ1188][HNOI2007]分裂游戏
  • 原文地址:https://www.cnblogs.com/liesun/p/9243779.html
Copyright © 2020-2023  润新知