我的java学习笔记之常见异常总结-2…

这个异常总结的由来是因为我们在开发过程中经常会采一些坑,而且这个坑又经常让我们死的很惨,为了避免我们不再犯这个错误我就把之前比较隐蔽查了很久的异常给记录下来分析下原因及解决方案,等下次碰到类似的问题我们就可以去异常库里面找我们的异常了,这样可以节省时间,后来发现有人已经做了这么个网站叫我的异常网,还是挺ok的,所谓题不二错,bug不再犯,但是现在已经久病成良医了,大部分异常都见识过了就不怕啦.我都忘记我之前碰到过什么错误了.不多说直接上原图.


这个异常的原因是由于之前已经生成了映射表,然后再次生成,导致主键不唯一,

因此将表干掉重新来过,异常解决;

 

2  使用hibernate的时候 当你不需要和数据库关联的字段,但是你确要使用到他的时候,

请不要写入到映射文件中,因为你使用的时候是不希望他数据库交互,但是一旦写入到映射文件中,就会和数据库相关联,从而引发其他逻辑上的错误;

 

当你发现你包含的jsp页面,js,css等文件没有导入,但是你确实增加了这么些代码;而且没有问题;那很可能就是浏览器缓存的问题,要清理清理;犯过这个错误了!

 

 

4java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction(Ljava/sql/Connection;)Lorg/apache/ibatis/transaction/Transaction;

这个异常的原因是由于mybatis的版本问题:

 

5:Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)

 

这个异常的原因是由于JavaEE5jarhibernate对应jpa的支持jar包相冲突导致的

解决方案是:删除JavaEE5l;

 

多对多映射中,中间表的表名设置两个映射文件都得写,否则会出问题的;

 

7[hibernate]org.hibernate.StaleStateException的问题

org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1

1). 使用的是hibernate的saveOrUpdate方法保存实例。saveOrUpdate方法要求ID为null时才执行SAVE,在其它情况下执 行UPDATE。在保存实例的时候是新增,但你的ID不为null,所以使用的是UPDATE,但是数据库里没有主键相关的值,所以出现异常。

Hibernate中对象关系的复制出现的异常解释:

// 复制

public String copy() throws Exception {

 

ContractDao oDao = (ContractDao) this.getDao("daoContract");

Contract oldContract = (Contract) oDao.get(Contract.classthis.model.getId());

Contract newContract=new Contract();

BeanUtils.copyProperties(oldContract, newContract);

newContract.setId(null);

newContract.setContractNo("拷贝"+newContract.getContractNo());

for(ContractProduct contractProduct:newContract.getContractProduct()){

contractProduct.setId(null);

for(ExtCproduct extCproduct:contractProduct.getExtCproduct()){

     extCproduct.setId(null);

}

}

oDao.save(newContract);

return list();

}

这种做法是指在在多的一方维护关系,但是他仅仅是将id置为null;也就是说在多的一方解除了关系,但是在一的一方关系还在,因为你是拷贝的,所以需要在多的一方重新建立和一的一方的关系;

解决方案:

for(ContractProduct contractProduct:newContract.getContractProduct()){

contractProduct.setContract(newContract);

contractProduct.setId(null);

for(ExtCproduct extCproduct:contractProduct.getExtCproduct()){

    extCproduct.setContractProduct(contractProduct);

extCproduct.setId(null);

}

}

也就是多了这么两句话:

contractProduct.setContract(newContract);

 extCproduct.setContractProduct(contractProduct);

重新建立关系;

最优的解决方案:

ContractDao oDao = (ContractDao) this.getDao("daoContract");

Contract oldContract = (Contract) oDao.get(Contract.classthis.model.getId());

oldContract.setId(null);

oldContract.setContractNo("复制"+oldContract.getContractNo());

for (ContractProduct contractProduct :oldContract.getContractProduct()) {

contractProduct.setId(null);

for(ExtCproduct extCproduct :contractProduct.getExtCproduct()){

extCproduct.setId(null);

}

}

oDao.saveOrUpdate(oldContract);

return list();

由于内部的关系还在,直接将id置为null就行了;

注意多级主从关系的维护需要双向的;

 

8BeanPropertyRowMapper:这个类可能会出问题的;以后碰到问题注意;问题原因:数据库的字段名和JavaBean的名称不匹配导致赋值不上;

 

9:

这个异常的原因是由于使用map,reduce函数时,参数不是Hadoop自身的类型,也就是没有实现Writable接口;这个错误很有可能发生在map,reduce的参数设置上面,已经死了好几回了

你可能感兴趣的:(JavaEE)