`
thinkerAndThinker
  • 浏览: 278221 次
  • 性别: 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库未导入的原因。

分享到:
评论

相关推荐

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

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

    论文研究-考虑随机离职的新产品研发项目组合多技能员工调度模型.pdf

    以多技能研发人员为调度对象,采用离散马尔可夫链描述人员离职过程,考虑人才培养战略收益、研发周期以及研发成本三个目标,建立了新产品研发项目组合调度随机多目标约束优化模型.采用自适应帕累托抽样算法求解模型...

    软件开发过程中的知识管理(论文合集)

    合集中有8篇论文,其中包括一篇硕士论文。

    软件工程选择填空题集

    大量选择题和填空题..答案已给出..................................

    Sora AI编程常见问题总结以及常用技巧说明概要.docx

    虽然当前现实中并未有确切证据表明存在一款名为“Sora AI”的具体产品或平台,但我们可以根据一般的AI开发过程中可能遇到的问题来推测开发者在构建类似Sora这样AI驱动的视频生成系统时可能会遇到的常见问题及对策: ...

    人工智能+python+AI模型训练+LableMe标注+数据集自动划分+项目文档

    【内容摘要】项目文档:...【目标】其效果体现为,经过处理后,项目会得到结构清晰、相互独立的训练数据和测试数据集,从而有利于模型的训练、优化及最终性能验证,对于提升整个图像分割模型的研发效率和质量至关重要。

    燃煤全水分在线自动检测系统的研发与设计

    为解决现有燃煤全水分检测过程中水分损失大、检测结果偏低的问题,研制了燃煤全水分在线自动检测系统。在对燃煤全水分检测原理探讨的基础上,重点介绍了在线自动检测系统在机械系统结构设计、软件控制系统设计及自动...

    IT领域成熟度模型合集.zip

    CMMI5软件过程管理成熟度模型(全套模板及培训教材合集) 企业数字化转型成熟度模型IOMM AWS云转型成熟度模型 网络安全能力成熟度模型 数据安全能力成熟度模型 国际数据管理能力成熟度评估模型 威胁情报成熟度模型 ...

    图像识别MATLAB+指纹识别+GUI+数据集(测试集,训练集)

    测试集50张+训练集50张+额外可识别项80张。 内容概要:该设计旨在为用户提供一个简单易用的工具,帮助他们对指纹图像进行处理、分析和识别。GUI 的界面布局设计极其清晰,包括导航栏、图像显示区域、参数设置面板和...

    项目管理全套:华为项目管理-敏捷项目管理-研发项目管理-PMI CMM3-PMO-软件项目测试等

    07 信息化项目验收过程 06 项目总结报告模板 05 概要设计说明书模板 04 数据库UI设计管理规范 03 项目管理模板 02项目管理流程规范制度 01 2023年02月新增 项目管 理实战模板 项目管理实用表格与应用 项目管理十大...

    东集八通道开发SDK+文档

    同时,配套的文档则提供了详细的接口说明、使用指南和常见问题解答,让开发者在使用过程中能够轻松上手,避免走弯路。 通过使用东集八通道开发SDK与文档,开发者可以更加专注于业务逻辑的实现,而无需花费大量时间...

    Tid大会AgileChina演讲PPT:Atlassian工具集在敏捷项目管理的应用实践

    3.了解如何依靠信息化手段度量敏捷研发过程 4.了解如何通过信息化数据对敏捷团队进行持续过程改进 5.了解如何在企业中应用、推广统一的信息化项目管理工具 面向群体: PMO、项目经理、敏捷教练、团队主管

    冻结工程信息自动化监控系统研发与应用

    冻结工程信息自动化监控系统,集计算机技术、网络技术、可视化技术、数值方法为一体,可对冻结工程施工中的重要参数进行实时监控,完成图像数据、测量数据的传输、存储、显示、报警、转换及打印等一系列工作,对冻结工程...

    上市公司企业科技创新数据大合集2007-2022专利引用创新投入创新产出创新质量创新效率

    准则》颁布后,中国上市公司在报告研发支出上有明显的学习适应过程,披露研发支出的企 业比例逐年提高并在2011年出现明显跃升,而披露了研发支出的样本中0值比例极低。 因此,如果一刀切地将缺失值剔除或者全部替换...

    芯片制造技术-芯片设计类技术资料合集.zip

    芯片研发过程介绍.pdf 芯片设计和生产流程.pdf 芯片设计实现介绍.pptx 芯片设计流程.pdf 芯片设计过程.doc 超大规模集成电路中低功耗设计与分析.pdf 超大规模集成电路设计.ppt 集成电路(IC)设计完整流程详解及各个...

    汽车技术+相关标准+通用知识等资料合集.zip

    【详解】8D问题求解法 【职场分享】职场生存法则20条(上) 2017年全球汽车零部件TOP100供应商排行榜 不可思议!电动汽车走过的路已将近两个世纪! 干货:鱼骨图分析法及其实战 各大自主汽车品牌构架合集 工程师必备...

    王者荣耀英雄数据爬取及数据集

    适合人群:对游戏数据分析感兴趣的研发人员,具备基础编程技能和对数据爬取有一定了解的开发者。 能学到什么:①了解数据爬取的基本流程和原理;②掌握使用Python进行网络请求和数据解析的方法;③学习如何分析网页...

    【推荐】集成电路芯片设计流程及技术资料合集.zip

    芯片研发过程介绍 一种基于MEMS技术的压力传感器芯片设计-王大军 影响倒角加工效率的工艺研究-康洪亮 用555芯片设计的施密特触发器电路 ASIC芯片设计生产流程 ECO技术在SoC芯片设计中的应用-王巍 ic设计流程工具 LDO...

    重磅推荐-2023史上最全的企业信息化管理体系文档大合集(1000+份).zip

    07 信息化项目验收过程 08 项目管理工具禅道 09 软件项目测试 10 项目经理管理 11 详细设计说明书实例 12 产品需求管理 13 PMO合集 14 华为项目管理 15 项目管理讲座培训 16 PMI CMM3 17 研发项目管理 18 敏捷项目...

    C++代码合集.rar

    C++(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生 [17] ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。 C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为...

Global site tag (gtag.js) - Google Analytics