hibernate使用小异常

快速解决遇到hibernate的小问题

Nov 7

 1.id 设置native自增报错?native需要数据库设置自增

id使用native自增,跑测试用例,抛异常

  1. org.hibernate.HibernateException: The database returned no natively generated identity value   

 

 2.单向一对多,抛出异常

User  表对应多个Address,配置User单项一对多,测试用例报错,详情如下:

xml 代码
  1. <class name="User" table="user">  
  2.   
  3.     <id name="userId" type="integer" column="user_id">  
  4.          <generator class="native" />      
  5.     id>  
  6.   
  7.     <bag name="userAddress" lazy="true" >  
  8.         <key column="user_id" >key>  
  9.         <one-to-many class="UserAddress">one-to-many>  
  10.     bag>  
  11.   
  12. class>  

报错:UserAddress未保存 

java 代码
  1. org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.hibernate.bean.user.UserAddress#123]  

原因:没有设置级联更新,添加cascase='true',修改如下:

xml 代码
  1. <bag name="userAddress" lazy="true" cascade="all">      
  2.     <key column="user_id" >key>      
  3.     <one-to-many class="UserAddress">one-to-many>      
  4. bag>    

  

3.update一对多对象,报错:no session or session is close

UserAddress设置lazy=true

xml 代码
  1. <bag name="userAddress" lazy="true" cascade="all">  
  2.     <key column="user_id" >key>  
  3.     <one-to-many class="UserAddress">one-to-many>  
  4. bag>  

将UserAddress的list 赋值给 user, 保存user后,再次查询保存后User , 报错 no session or session is close

java 代码
  1. public boolean addUserAddress(int userid, UserAddress userAddress) {   
  2.   
  3.     User user = (User) dao.findById(User.class123);   
  4.   
  5.     List list = new ArrayList();   
  6.     list.add(userAddress);   
  7.        
  8.     user.setUserAddress(list);   
  9.   
  10.     dao.update(user);   
  11.     User user2 = (User) dao.findById(User.class, 123);
  12. }  
java 代码
  1. org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.hibernate.bean.user.User.userAddress, no session or session was closed  

 看到 no session or session was close ,立即应该想到方法没有事务处理,延时加载UserAddress,必须在事务里面,不然怎么加载呢? 添加事务,以spring为例:

java 代码
@Transactional   public boolean addUserAddress(int userid, UserAddress userAddress) {    }  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值