`

『Hibernate』面对几个错误的解决关键

    博客分类:
  • J2EE
阅读更多
1、
org.springframework.orm.ObjectRetrievalFailureException: Object of class [com.xindeco.myregister.pojo.MyRegisterInfo] with identifier [14]: not found

MyRegisterInfo在数据库没有identifier [14]对象。


2、
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: com.xindeco.myregister.pojo.MyRegisterInfo column: password (should be mapped with insert="false" update="false")


出错原因:password 和repassword同时对应数据库表中的password一列,同时update和insert都设为true。
xml文件如下:
  
 <property name="password"
                          type="java.lang.String"
                          update="true"
                          insert="true"
                          access="property"
                          column="password"
                          length = "32"
                          />

                         <property name="repassword"
                          type="java.lang.String"
                          update="false"
                          insert="false"
                          access="property"
                          column="password"
                          length = "32"
                          />
解决的方法:
将repassword的insert和update设为false。


3、
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; 
nested exception is org.hibernate.PropertyNotFoundException: Could not find a getter for ID in class 

错误原因:hibernate的映射文件中ID是大写的,而pojo的类中id是小写的

注意事项:每个pojo的类都要继承abstractEntity,其中abstractEntity类有个ID的属性要重写
 public abstract class AbstractEntity
    implements Entity, BaseDTO {

    abstract public long getID();

    abstract public void setID(long id);

    public int hashCode() {
        return (int)this.getID();
    }

    public boolean equals(Object obj) {
        if (obj == this) {
            return true;
        }
        if (obj instanceof Entity) {
            return this.getID() == ( (Entity) obj).getID();
        }
        return false;
    }
}

4、
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition


错误原因:
在application.xml文件中deleteRegister方法以delete开头,并没有被设定为可更改的,应如下设置:
<!--为事物创建代理类,并指定方法的事物类型-->
 <bean id="baseTxProxy" lazy-init="true" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
      <ref bean="transactionManager"/>
    </property>
    <property name="transactionAttributes">
      <props>
        <prop key="add*">PROPAGATION_REQUIRED</prop>
        <prop key="cancel*">PROPAGATION_REQUIRED</prop>
           </props>
    </property>
  </bean>
加上一行
  <prop key="delete*">PROPAGATION_REQUIRED</prop>

5、
   ERROR org.apache.struts.util.RequestUtils - Error creating form bean of class com.xindeco.business.web.form.GraAppInfoForm


public class  GraAppInfoForm
extends ActionForm 错误写成
public abstratic class  GraAppInfoForm
extends ActionForm

6、
2006-04-25 08:56:38,495 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@8e2fb5
java.lang.ClassCastException: $Proxy0
 at com.xindeco.business.web.action.GraAppAction.newone(GraAppAction.java:30)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
 at com.xindeco.core.web.action.BaseAction.dispatchMethod(BaseAction.java:153)
 at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)



actioin类中的newone方法如下:
public  class GraAppAction
    extends BaseAction {
    public ActionForward newone(ActionMapping mapping, ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response) throws Exception {
       GraAppService  graservice = (GraAppService) this.getBean("GraAppService");
}

applicationcontext中的GraAppService的配置如下:
 
  <bean id="GraAppDAO" class="com.xindeco.business.dao.impl.GraAppDAOImpl">
    <property name="support">
      <ref local="support"/>
    </property>
    <property name="sessionFactory">
      <ref local="sessionFactory"/>
    </property>
  </bean>
  <bean id="GraAppService" parent="baseTxProxy">
    <property name="target">
      <bean class="com.xindeco.business.service.impl.GraAppServiceImpl" autowire="byName">
        <property name="baseDAO">
          <ref bean="GraAppDAO"/>
        </property>
      </bean>
    </property>
  </bean>

因此this.getBean("GraAppService");是为了得到GraAppServicImpl类的实现。GraAppService是interface
public class GraAppServiceImpl extends BaseServiceImpl 
    implements GraAppService{
}


7、
org.hibernate.hql.ast.QuerySyntaxException: Demand is not mapped. [from Demand where unitid = ? and needNum > usedNeedNum]


hibernate.cfg.xml没有配置Demand.hbm.xml文件的目录

8、
org.springframework.jdbc.BadSqlGrammarException: Bad SQL grammar 
[] in task 'Hibernate operation'; nested exception is java.sql.SQLException: 列名 'id' 无效。
java.sql.SQLException: 列名 'name' 无效。

因为hibernate声明的id,name的columnid属性没有与数据库的字段对应,所以id,name无效。


9、
java.lang.NumberFormatException: null
 at java.lang.Integer.parseInt(Integer.java:415)
 at java.lang.Integer.parseInt(Integer.java:497)
 at com.xindeco.business.service.impl.DemandServiceImpl.findDemandListByUnitId(DemandServiceImpl.java:33)


错误语句为
needNum = Integer.parseInt(demand.getNeedNum());
usedNeedNum = Integer.parseInt(demand.getUsedNeedNum());
因为demand.getUsedNeedNum()==null,无法转化为string 类型,

10、
rg.apache.jasper.JasperException: /GraAppInfo/GraAppInfoNew.jsp(343,29) According to TLD, tag bean:write must be empty, but is not


错误的原因:
   
          <select name="politicsID" >
             <option value="">请选择</option>
       <logic:notEmpty name="politicsList">
                <logic:iterate id="politics" name="politicsList">
                          </logic:notEmpty>
           <option value="<bean:write name="politics" property="codeID"/>"><bean:write name="politics" property="codeName"/></option>
          </logic:iterate>
 </select>
就因为少了/>
以后懂得通过查找字数,来检查错误


11、
2006-04-26 13:27:54,812 ERROR com.xindeco.core.util.BeanUtils - bean property [Nation] copy failed
com.xindeco.core.exception.ConvertException: org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.String; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.String

beanUtil.beanCopy(grapojo,form,BizConstants.CONVERTER);
要求:
1、pojo类的属性只有与form属性名字相同,才能beancopy成功
2、pojo中属性是实体,在form中一定要用int,long表示
出现这错误的原因是pojo中的属性不是实体,而错误写成:
string
private String nation;应改成 private Syscode nation;

12、
2006-04-26 14:38:37,843 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@fa1b2d
java.lang.NullPointerException
 at com.xindeco.business.web.action.GraAppAction.newone(GraAppAction.java:43)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)


hibernate配置文件没改,程序找不到相应的类
   
    <many-to-one
            name="FSUnit"
            class="com.xindeco.business.pojo.EmployUnitBaseInfo"
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            access="property"
            column="fSUnit"
        />

其实FSUnit对应的类应该是FSUnit
   
    <many-to-one
            name="FSUnit"
            class="com.xindeco.business.pojo.FSUnit"
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            access="property"
            column="fSUnit"
        />

13、
org.hibernate.MappingException: An association from the table GraAppInfo refers to an unmapped class: com.xindeco.business.pojo.FSUnit


错误原因:hibernate.cfg.xml没有配置fsunit.hbm.xml文件的位置

14、
java.lang.ClassCastException: com.xindeco.business.dao.impl.GraAppDAOImpl
at com.xindeco.business.service.impl.GraAppServiceImpl.addGraduateApp(GraAppServiceImpl.java:16)
GraAppServiceImpl.java:16
第16行: GraAppDAO dao = (GraAppDAO) this.getBaseDAO();//其实得到的是GraAppDAOImpl

错误的原因是
public class GraAppDAOImpl
    extends BaseDAOImpl {

}
没有实现GraAppDAO接口,正确的做法是
public class GraAppDAOImpl
    extends BaseDAOImpl implements GraAppDAO {
}
先继承后实现


15、2006-04-27 08:38:54,078 ERROR
com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@1d6399b
java.lang.ClassCastException: com.xindeco.business.pojo.SysCode
 at org.hibernate.type.StringType.set(StringType.java:26)
 at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:63)
 at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:40)

一般是因为hibernate声明类型和pojo类声明的类型不一样,并且前面已经出现了Hibernate: insert into TGraAppInfo (name, whereFrom, degree, college, speciality, studentRelTel, remark, higherEduLength, highSchool, studyResume, normalOrNot, proxyUnit, workPost, workPlace, studentAddress, studentPostNumber, nation, appStatus) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
的操作提示,查出错误的原因有:
     
  <many-to-one
            name="demand"
            class="com.xindeco.business.pojo.Syscode"
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            access="property"
            column="demandID"
        />
         <property
            name="appStatus"
            type="int"
            update="true"
            insert="true"
            access="property"
            column="appStatus"
            length="10"
        />
应改为   
      
 <many-to-one
            name="demand"
            class="com.xindeco.business.pojo.Demand"
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            access="property"
            column="demandID"
        />

  <many-to-one
            name="nation"
            class="com.xindeco.business.pojo.SysCode"
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            access="property"
            column="nation"
        />

16、
org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: com.xindeco.business.pojo.SysCode
 at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:626)
 at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:570)
 at 
org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:482)




pojo类为:
public class GraAppInfo{
             private College college;
}


action 类为
public class GraAppAction
    extends BaseAction {
       public ActionForward add(ActionMapping mapping, ActionForm form,
                             HttpServletRequest request,
                             HttpServletResponse response) throws Exception {

        graInfo.setCollege(new College());\\必须从数据库找到college这个对象,而不能新生成
        
        graInfo.getCollege().setID(graForm.getCollegeID());
        graInfo.setAppStatus(Integer.parseInt("0"));
      service.addGraduateApp(graInfo);
}


public class GraAppServiceImpl extends BaseServiceImpl
    implements GraAppService{

    public boolean addGraduateApp(GraAppInfo info)
    {
        this.getBaseDAO().save(info);
        return true;
    }
}

dao类save方法为
    getHibernateTemplate().save(obj);

当cascade="all",插入new college 除了id和原来的记录一样,其他的字段全部都被更新,为null
当cascase=“insert”,插入new college 只会把它的id插入grainfo表中,其他字段不变。

17、
java.sql.SQLException: Unable to convert between java.lang.Integer and BLOB.
因为
       
<property
            name="province"
            type="com.xindeco.business.pojo.SysCode"//不能用复杂类,
            update="true"
            insert="true"
            access="property"
            column="provinceId"
        />
应该改为
        
   <many-to-one
            name="province"
            class="com.xindeco.business.pojo.SysCode"
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            access="property"
            column="provinceId"
        />

18、
javax.servlet.jsp.JspException: Cannot create iterator for this collection
 at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:265)

jsp文件如下:
  <logic:notEmpty name="graduateList" >
   <logic:iterate id="graduate"  name="graduateList" >
   </ogic:notEmpty >
   </ogic:iterat>
graduateList是一个类,而logic:iterator要求必须是ArrayList,HashSet....这样的集合类,而graduateList中一个属性是ArrayList或HashSet的
应改为:
<logic:notEmpty name="graduateList" property="items">
<logic:iterate id="graduate"  name="graduateList" property="items" >
</ogic:notEmpty >
  </ogic:iterat>


19、
2006-05-11 17:13:37,468 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@bc22eb
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed

SysUser user= (SysUser) request.getSession().getAttribute(WebConstants.SESSION_USER);
        System.out.println(user.getRole().getRoleName());
当hibernate session取出数据放到http session时,
由于sysuser中role的lazy=“true”,所以没有将RoleName放到http session中,当System.out.println(user.getRole().getRoleName());
时,虽然http session还开着, hibernat seesion已经关闭
    
   <many-to-one
            name="role"
            class="com.xindeco.business.pojo.SysRole"
            lazy="false"
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            access="property"
            column="roleID"
        />

20、
Association references unmapped class: com.xindeco.workflow.WFNode
因为application.xml文件中没有配置<mapping resource="com/xindeco/workflow/WFNode.hbm.xml"/>
系统找不到WFNode

         < set
            name = " nodes " 
            table = " WF_ROLENODES " 
            lazy = " true " 
            inverse = " false " 
            cascade = " none " 
            sort = " unsorted " 
         > 
                < key
                  column = " roleID " 
               > 
               </ key > 
 
                  < many - to - many
                   class = " com.xindeco.workflow.WFNode " 
                  column = " nodeId " 
                  outer - join = " auto " 
                /> 
            <set > 
分享到:
评论
3 楼 shangyixue 2015-12-23  
受益了
2 楼 zengbailan 2010-08-10  
总结的不错,支持了。
1 楼 zhangxu3739 2008-11-25  
不错
受益了  ........

相关推荐

    hibernate和Spring源码

    源码分析主要涉及以下几个关键点: 1. **持久化机制**:Hibernate的核心在于实体类与数据库表之间的映射,通过Hibernate的配置文件和注解,我们可以定义对象与数据库表的对应关系。 2. **Session接口**:它是...

    计算机java实习日记 (2).docx

    我们可以从中提取并展开多个与Java实习相关的知识点,包括但不限于实习初期的心理状态调整、解决技术问题的过程、与客户的沟通技巧以及Java Web开发中的关键技术框架(Struts、Spring 和 Hibernate)。下面将详细...

    王勇老师SSH和DRP视频教程地址

    一个完整的DRP通常包括以下几个关键部分: 1. **风险评估**:识别可能对业务造成影响的潜在威胁,包括硬件故障、软件错误、网络中断等。 2. **备份策略**:定期对数据进行备份,确保在灾难发生后能够快速恢复。 3. ...

    errors code

    本文将深入解析一个与Java Web应用开发相关的错误代码示例,该示例涉及到Struts、Spring、Hibernate框架以及Apache Tomcat服务器的配置和运行时问题。 ### 错误代码分析 #### Apache Tomcat Native Library未找到 ...

    java程序员个人简历.docx

    在项目经验部分,仝照美参与并独立完成了几个项目,包括骑士飞行棋控制台应用、品红网站和当当网模拟项目。这些项目涵盖了从简单的控制台游戏到复杂的企业级网站开发,显示了他的实际操作能力和问题解决技巧。在项目...

    软件工程专业毕业生实习总结.doc

    从这段实习总结中,我们可以提炼出几个关键的知识点: 1. **技术栈应用**:实习生最初参与的项目使用了Struts、MySQL、Spring和Hibernate等技术,这些都是Java Web开发中的常见框架,体现了软件工程中的分层架构...

    Sample_4_1_java_

    描述中的“还有几个java程序才能通过啊 为什么这么难”表达了学习者在面对Java编程挑战时的困扰,这可能是由于Java语法的复杂性、面向对象的概念理解难度,或者是具体问题的解决策略尚未掌握。 Java的基础知识点...

    大型网站技术架构:核心原理与案例分析+李智慧

    在Java、SSH(Struts2、Spring、Hibernate)和技术环境(TE)的标签下,我们可以推断本书着重讨论了以下几个关键知识点: 1. **Java编程语言**:Java是构建大型网站后端服务的主流语言,其面向对象特性、丰富的类库...

    java 实训报告

    此外,项目实施过程中遇到的问题和解决方案,也是宝贵的学习经验,它教会我们如何面对挑战,如何有效地利用资源解决问题。 总之,“Java实训报告”不仅是一份关于时钟动画项目的技术文档,更是学习Java编程、软件...

    第 5-7 课:综合实战客户管理系统(⼀)1

    在这个综合实战的客户管理系统中,我们主要关注以下几个关键知识点: 1. **用户管理功能**:系统的核心在于用户管理,包括管理员注册、注册验证、登录、退出、用户添加、修改、删除以及浏览用户信息等。这些功能是...

    J2EE项目案例源代码(强力推荐:运行稳定)

    在实际分析压缩包内的文件时,我们应关注以下几个方面: 1. **项目结构**:了解项目的目录结构,包括src、lib、web-inf等关键目录的作用,这对于理解和维护项目至关重要。 2. **配置文件**:如web.xml、pom.xml等,...

    PermGen space

    #### 几个关键因素导致PermGen Space溢出: 1. **第三方库**:使用某些第三方库(如proxool、cglib等)可能由于其内部机制大量消耗PermGen Space。 2. **日志框架**:如log4j或其他日志系统,若不适当配置,也可能...

    项目技术架构选型方案报告

    系统主要分为以下几个层次: - **展示层**:主要包括JSP、JS和各类界面控件,采用AJAX和Flex等RIA技术提升用户体验。 - **控制层**:处理展示层请求的转发、调度以及基础验证,自动拦截并处理后台运行时异常。 - **...

    DBKING使用指南

     异构数据库的导入导出一直是个大难题,一般的工具配置复杂,尤其是不支持LOB这样的大字段数据,我们的这个工具不仅配置简单,而且具有以下几个特点。  1、速度非常快,这个因为取决于系统环境,这个只有谁用...

    java初学者问题——能看懂,不会写怎么办?

    在编程过程中,一个小的符号错误或拼写错误都可能导致程序无法正常运行。how2j.cn网站的代码比较功能非常实用,允许用户将自己的代码与正确的代码进行比对,快速定位错误,这对于初学者来说是很好的辅助工具,能够...

    superhero:搜索您的超级英雄,其中会显示出他的能力。

    要实现这一功能,我们可能需要以下几个关键组件: 1. **数据库设计**:为了存储超级英雄的数据,我们需要设计一个数据库模型。这可能包含表如`SuperHero`(包含英雄的基本信息,如名字、真实身份等)和`Power`...

    java-test-examples

    在这个Java测试示例中,我们可以学习到以下几个关键知识点: 1. **单元测试**:单元测试是对程序中最小可测试单元进行检查和验证,如函数、方法或类。使用JUnit这样的框架,我们可以编写测试用例来验证特定方法的...

Global site tag (gtag.js) - Google Analytics