这个异常的原因是由于之前已经生成了映射表,然后再次生成,导致主键不唯一,
因此将表干掉重新来过,异常解决;
2 使用hibernate的时候 当你不需要和数据库关联的字段,但是你确要使用到他的时候,
请不要写入到映射文件中,因为你使用的时候是不希望他数据库交互,但是一旦写入到映射文件中,就会和数据库相关联,从而引发其他逻辑上的错误;
3 当你发现你包含的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)
这个异常的原因是由于JavaEE5的jar和hibernate对应jpa的支持jar包相冲突导致的
解决方案是:删除JavaEE5的l包;
6 多对多映射中,中间表的表名设置两个映射文件都得写,否则会出问题的;
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.class, this.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.class, this.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的参数设置上面,已经死了好几回了