`
thinkerAndThinker
  • 浏览: 287039 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

研发过程问题集

 
阅读更多

1.现象:action无报错,客户端页面报错,无资源;

   解答:资源地址有错误;

 

 2.现象:控制台报错:org.hibernate.ObjectNotFoundException: No row with the given identifier exists:   [com.tekview.apex.itsm.common.bo.columnInfo.Column#0]

    解答:

    问题产生原因:
有一个对象A,关联了对象B ,关联关系可以使 ManyToOne,On

eToOne 等,如果我们在数据库中清除了B对象,但是B对象还在A表中存在外键,这时候Hibernate检查这个关系的时候,会报出这个异常。但是A与B在数据库 为范围内不能耦合过紧,只能pojo中建立关联关系,此时要注意,清除A表中的外键,可以解决此问题,一般的垃圾数据会造成业务系统不能正常运转。

第二个原因:
查询的时候,假设对象A与B有着一对一的关系,一般我们配置
@On
eToOne
@JoinColumn(name = "xxx"),如果B被删除了,但是A中还维护这个外键关系
要配置
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "xxx")
的模式,不知道为什么默认不是lazy的,还要配置一下fetch = FetchType.LAZY

本要急于测试所以直接设置为不关联not-found="ignore"
Hibernate的many-to-one的元素的一个属性:not-found今天看Hibernate Reference,看到多对一关系时,看到mant-to-one元素有一个属性:not-found。用来指定引用的外键不存在时将如何处理:
  • exception(默认)抛出异常
  • ignore 忽略

以前不知道有这个属性,Hibernate就采用默认的抛出异常来处理了。经常出现显示一个项目的列表时没有数据。

 

3. 现象:Property ‘columnId’ not found on type java.lang.String, hbm.xml中有这个属性,提示没有

 

    解答:<c:forEach var="column" items="columnList" varStatus="status"> 修改为:

              <c:forEach var="column" items="${columnList}" varStatus="status">  

 

 

 4. 现象:SpringMVC ModelAttribute无法绑定java.util.Date类型数据

    解答:需要指定默认时间转换器

  @InitBinder    
  protected void initBinder(WebDataBinder binder) {    
      binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); 
  }

     写一个Controller基类,把这些处理方法写到基类里面,然后每一个Controller去继承这个基类,应该是没问题。

 

5. 现象:保存实体时报错:org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.tekview.apex.itsm.common.bo.infomation.Column

 

   解答:《精通Hibernate:Java对象持久化技术详解》第7章映射一对多关联关系,本章介绍一对多关联关系的映射方法。为大家介绍级联保存和更新。

 

5.1.1  <many-to-one>元素的not-null属性

当执行saveCustomerAndOrderWithCascade()方法时,会抛出如下异常:

  1. org.hibernate.PropertyValueException: not-null property   
  2. references a null or transient value: mypack.Order.customer 

这是在执行session.save(order1)方法时抛出的异常:

  1. tx = session.beginTransaction();  
  2. Customer customer=new Customer("Jack");  
  3. //session.save(customer);  不保存customer对象  
  4.  
  5. Order order1=new Order("Jack_Order001",customer);  
  6. Order order2=new Order("Jack_Order002",customer);  
  7.  
  8. session.save(order1); //抛出PropertyValueException异常  
  9. session.save(order2);  
  10.         
  11. tx.commit(); 

下面分析产生异常的原因。在调用session.save(order1)方法之前,order1和customer对象都是临时 (transient)对象。临时对象是指刚通过new语句创建,并且还没有被持久化的对象。假定session.save(order1)方法执行成 功,order1对象被成功持久化,就变成了持久化对象,而Hibernate不会自动持久化order1所关联的customer对象,在数据库中意味 着仅向ORDERS表中插入了一条记录,并且该记录的CUSTOMER_ID字段为null,这违反了数据库完整性约束,因为不允许ORDERS表的 CUSTOMER_ID字段为null。所以在这种情况下,Hibernate不允许持久化order1对象,会抛出 PropertyValueException异常,错误原因为order1对象的非空属性customer引用了一个临时对象customer。如果要 更加详细地了解持久化对象和临时对象的区别,参见本书第8章(通过Hibernate操纵对象(上)。

假定允许ORDERS表的CUSTOMER_ID字段为null,因此删除Order.hbm.xml文件的<many-to-one>元素的not-null属性,此时Hibernate会采用not-null属性的默认值false,修改后的代码如下:

  1. <many-to-one  
  2.       name="customer" 
  3.       column="CUSTOMER_ID" 
  4.       class="mypack.Customer" 
  5.       lazy="false"     
  6. /> 

是否应该把<many-to-one>的not-null属性设为true,这是由实际业务需求决定的。通常,每个订单总是由某个客户 发出,因此应该把not-null属性设为true。本章在某些场合,如本节和7.2.1节,允许ORDERS表的CUSTOMER_ID外键为 null,仅仅是为了便于举例演示当映射文件的某些属性取不同值时Hibernate的运行时行为。

再次运行saveCustomerAndOrderWithCascade()方法,这次Hibernate成功地持久化了order1和order2对象,执行的insert语句为:

  1. insert into ORDERS (ID, ORDER_NUMBER, 
    CUSTOMER_ID) values (
    3,"Jack_Order001"null)  
  2. insert into ORDERS (ID, ORDER_NUMBER, 
    CUSTOMER_ID) values (
    4,"Jack_Order002"null

但是当Hibernate自动清理(flush)缓存中所有持久化对象时,抛出了新的异常:

  1. [java]org.hibernate.TransientObjectException: 
    object references an unsaved 
    transient   
  2. instance - save the transient instance before
    flushing: mypack.Customer 

所谓清理,是指Hibernate按照持久化对象的属性变化来同步更新数据库。Hibernate发现持久化对象order1和order2都引用临时对象customer,而在ORDERS表中相应的两条记录的CUSTOMER_ID字段为null,这意味着内存中的持久化对象的属性和数据库中记录不一致,参见图7-5,而且在这种情况下,Hibernate没办法使两者同步,因为Hibernate不会自动持久化Customer对象,所以Hibernate会抛出TransientObjectException异常,错误原因是持久化对象order1的customer属性引用了一个临时对象Customer。

 
图7-5  持久化对象order1和order2引用临时对象customer

 

5.1.2  级联保存和更新

根据7.1.1节可以看出,当Hibernate持久化一个临时对象时,在默认情况下,它不会自动持久化所关联的其他临时对象,所以会抛出 TransientObjectException异常。如果希望当Hibernate持久化Order对象时自动持久化所关联的Customer对象, 可以把<many-to-one>的cascade属性设为"save-update",cascade属性的默认值为"none":

  1. <many-to-one  
  2.         name="customer" 
  3.         column="CUSTOMER_ID" 
  4.         class="mypack.Customer" 
  5.         cascade="save-update"    
  6.         not-null="true"   
  7.         lazy="false" 
  8. /> 

再执行saveCustomerAndOrderWithCascade()方法中的session.save(order1)方法时,Hibernate把order1和customer对象一起持久化,此时Hibernate执行的SQL语句如下:

  1. insert into CUSTOMERS (ID,NAME) values (2"Jack")  
  2. insert into ORDERS(ID,ORDER_NUMBER,
    CUSTOMER_ID)values(
    3,"Jack_Order001",2

当cascade属性为"save-update",表明保存或更新当前对象时(即执行insert或update语句时),会级联保存或更新与它关联的对象。

 

6. 现象: 报错 org.hibernate.TransientObjectException: object references an unsaved transient instance

异常1:not-null property references a null or transient value
解决方法:将“一对多”关系中的“一”方,not-null设置为false
(参考资料:http://www.thearcmind.com/confluence/pages/viewpage.action?pageId=212)

异常2:org.hibernate.TransientObjectException: object references an unsaved transient instance
解决方法:cascade="save-update,persist"
(参考资料:http://www.laliluna.de/254.html)

异常3:org.hibernate.QueryException: could not resolve property
解决方法:"from Category category where category.userID = :userID"修改为"from Category category where userID = :userID"或者"from Category category where category.user.id = :userID"
(参考资料:http://www.laliluna.de/277.html)

异常4:could not initialize proxy - the owning Session was closed
解决方法:设置lazyfalse
(参考资料:http://forum.springframework.org/showthread.php?t=27993)

 

异常2我在应用中碰到了这样的问题:

有三个表:userInfo   deptmentInfo   role

userInfo 与deptmentInfo为many to one

userInfo 与role为many to one

下面为保存UserInfo对象时的代码:

    DeptmentInfo dept = new DeptmentInfo();
    dept.setDeptName(deptName);

    Role role = new Role();
    role.setRoleName(roleName);

    UserInfo user = new UserInfo();
    user.setUserName(userName);
    user.setUserSex(userSex);
    user.setDuty(duty);
    user.setPhone(phone);
    user.setMobileNum(mobileNum);
    user.setEmail(email);
    user.setQq(qq);
    user.setMsn(msn);
    user.setAdress(adress);
    user.setDeptmentInfo(dept);
    user.setRole(role);

    dao.save(user);

 

执行时有错:org.hibernate.TransientObjectException: object references an unsaved transient instance

 

于是改了UserInfo.hbm.xml的一些地方

如下:

<many-to-one name="role" class="com.oa.domain.Role"
   cascade="save-update,persist" fetch="select">
    <column name="ROLE_ID" precision="22" scale="0" />
   </many-to-one>
   <many-to-one name="deptmentInfo"
    class="com.oa.domain.DeptmentInfo" cascade="save-update,persist"
    fetch="select">
    <column name="DEPT_ID" precision="22" scale="0" />
   </many-to-one>

 

加了上面红色部分的,就OK了,能保存了。

 

8. strus1 的action里jsp调用的方法无返回值也就写成返回“ActionForward”类型的;

 

 9. java 导入的项目很多都报cannot be resolved to a type的错误,不是导包问题

       解答:这个错误可能是服务器自带的servlet库未导入的原因。

分享到:
评论

相关推荐

    阿里技术参考图册研发篇算法篇合集

    《阿里技术参考图册研发篇算法篇合集》是一份由阿里巴巴集团编撰的技术参考资料,主要聚焦于软件研发过程中的算法应用与理解。这个合集包括了两部分:《阿里Tech101研发篇》和《阿里Tech101算法篇》,通过PDF格式...

    藏经阁-百度研发工具集的应用实践.pdf

    这篇分享由百度工程效率部的研发工具平台资深产品经理王一男主讲,他介绍了如何通过一系列工具和方法来打破研发过程中的效率障碍,即所谓的“三堵墙”。 首先,王一男提到了百度效率云产品,这是一个包含研发工具...

    IT行业经典面试题集

    面试题集通常包含了各种技术问题,涵盖了编程、算法、操作系统、计算机网络、数据库、软件工程等多个领域。这里,我们根据"IT行业经典面试题集"这个主题,来深入探讨一下这些领域的关键知识点。 首先,编程是IT行业...

    【项目管理】新产品研发项目及项目集管理实践分享(P22页).pdf

    新产品研发项目及项目集管理实践分享是指在新产品研发项目中对项目管理的实践分享。这包括项目管理的基本概念、项目管理的方法和工具、项目管理的实践案例等。 项目管理的基本概念包括项目、项目集、项目组合等概念...

    选矿过程运行指标优化软件的研发

    选矿过程运行指标优化软件的研发涉及的关键知识点和理论方法包括: 1. 选矿过程与运行指标的定义:选矿是通过对矿石进行一系列物理和化学处理以分离出有用矿物和杂质矿物的过程。在选矿过程中,运行指标是指能反映...

    CMMI5软件过程管理成熟度模型5级全套模板及培训教材合集.zip

    CMMI5软件过程成熟度模型5级项目管理模板,整套CMMI5管理文档模板资源53套模板 CMMI精粹:集成化过程改进实用导论 CMMI培训PPT资料(1-8全集) 能力成熟度整合模型教程 软件工程文档全套模板等

    研发质量管理(学员版).pdf

    5. **研发过程资产库(PAL)**:积累和管理研发过程中的各种文档、数据库、工具等资源,为后续项目提供参考和支持。 6. **质量管理工具的应用**:利用质量管理的新老七工具等方法论,提高质量管理的效率和效果。 7. **...

    AiDD 2023 AI+软件研发数字峰会(公开)PPT汇总(36份).zip

    打造LLM高质量代码生成的神兵利器大规模节点故障预测技术实践大模型驱动的...研发新范式及其国内落地现状基于服务关键旅程和大模型技术的智能客服产品及展望基于业务大模型的B端产品体验设计开源大语言模型基座在去哪儿...

    ARM研发常见问题集

    ARM研发常见问题集是ARM处理器开发中常见的一些问题和解释,涵盖了ARM中的一些常见英文缩写解释、MAM和VIC的使用注意事项、ARM启动代码设计、IRQ和FIQ之间的差别、ARM处理器对异常中断的响应过程、ARM指令和Thumb...

    三种研发过程中提高SQL性能方法的分析.pdf

    在研发过程中,提高SQL性能是确保数据库操作效率的关键因素之一。本文分析了三种在SQL研发过程中提高性能的方法,包括优化JOIN操作、合理使用IDENTITY属性值以及创建内嵌视图与临时表的应用。下面是对这些知识点的...

    社区楼道垃圾数据集——模型,分为有杂物和无杂物两个数据集.zip

    总的来说,这个数据集提供了一个很好的平台,用于研发和训练楼道杂物识别模型。通过深度学习和图像处理技术,我们可以创建一个智能系统,助力社区维护干净整洁的楼道环境,提升居民的生活品质。

    中国5年间隔水蚀区土壤侵蚀公里网格数据集(2000-2015).rar

    同时,数据集也可用于教育和培训,帮助学生和研究人员理解土壤侵蚀的过程,提高他们解决问题的能力。 总结来说,这个“中国5年间隔水蚀区土壤侵蚀公里网格数据集(2000-2015)”是全面了解和研究中国水蚀问题的基石...

    垃圾目标检测/物体目标检测 数据集

    这五类垃圾在现实生活中对环境的影响尤为显著,因此能够帮助研发出更精确的智能系统来处理这些问题。 数据集采用COCO(Common Objects in Context)格式,这是一种广泛接受的标准,用于物体检测、分割和关键点检测...

    XX研究所协同研发平台 可研论证材料

    XX研究所协同研发平台的可研论证材料主要关注的是在IT领域如何通过...同时,通过数据管理,能够更好地追踪研发过程,便于问题定位和后期的维护升级。因此,建设这样一个平台对于XX研究所的长期发展具有重要的战略意义。

    车辆类型以及车牌检测数据集

    在自动驾驶汽车的研发过程中,能够有效识别周围环境中的不同类型的车辆是关键技术之一。通过对本数据集的学习,可以增强自动驾驶系统的环境感知能力,确保行车安全。 ### 四、总结 综上所述,“车辆类型以及车牌...

    辣椒病害数据集.rar

    随着科技的飞速发展,深度学习技术在农业领域的应用愈发广泛,特别是在农作物病害识别这一关键问题上展现出了巨大的潜力。传统的农作物病害识别往往依赖于人工经验,不仅效率低下,而且准确率受人为因素影响较大。...

    LRS2唇语识别数据集申请表

    LRS2唇语识别数据集是英国广播公司(BBC)研发的一个重要资源,用于唇语识别及相关无障碍技术的研究项目——"Lip Reading in the Wild - Sentences"。该数据集包含由BBC制作的节目内容,旨在为学术研究提供丰富的素材...

Global site tag (gtag.js) - Google Analytics