错误Batch update returned unexpected row count from update [0]; actual row count: 0;

错误Batch update returned unexpected row count from update [0]; actual row count: 0;

 

把开发过程中碰到的BUG累积下来也是一笔财富。
网络收集:
Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
不注意的话,还真的有点无所适从,Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1这个异常是由于主键设置为自增长,而在我们插入记录的时候设置了ID的值导致的。
Hibernate 注释@OneToOne 建立表关联实例

我的解决方案:
我是在做One-To-One级联 添加/更新 碰到的,开始还以为是我配置错误,后面经过仔细排查,发现是我在页面上写了子表ID的隐藏表单域,传到后面的时候value="" ,不是value=null,所以执行的时候hibernate判断为更新,所以报错了。我的解决方案是把ID单独传到后台,然后用代码判断是否为空,然后进行更新或者增加。


下面是我的代码:
TranOrders.java(父类):

Java代码  错误Batch update returned unexpected row count from update [0]; actual row count: 0;
  1. @Entity  
  2. @Table(name = "TSPRO_TRAN_ORDERS")  
  3. public class TranOrders implements java.io.Serializable {  
  4.   
  5.     // Fields      
  6.     private TranItem tranItem;  
  7.     private TranCar tranCar;  
  8.   
  9.     /** default constructor */  
  10.     public TranOrders() {  
  11.     }  
  12.   
  13.   
  14.     @OneToOne(cascade=CascadeType.ALL,mappedBy="tranOrders",fetch=FetchType.LAZY,optional = true)   
  15.     @JoinColumn(name="id",unique=true)   
  16.     public TranItem getTranItem() {  
  17.         return tranItem;  
  18.     }  
  19.   
  20.     public void setTranItem(TranItem tranItem) {  
  21.         this.tranItem = tranItem;  
  22.     }  
  23.   
  24.     @OneToOne(cascade=CascadeType.ALL,mappedBy="tranOrders",fetch=FetchType.LAZY,optional = true)   
  25.     @JoinColumn(name="id",unique=true)   
  26.     public TranCar getTranCar() {  
  27.         return tranCar;  
  28.     }  
  29.   
  30.     public void setTranCar(TranCar tranCar) {  
  31.         this.tranCar = tranCar;  
  32.     }  
  33.   
  34.    
  35. }  


TranItem.java(子类)

Java代码  错误Batch update returned unexpected row count from update [0]; actual row count: 0;
  1. @Entity  
  2. @Table(name = "TSPRO_TRAN_ITEM")  
  3. public class TranItem implements java.io.Serializable {  
  4.   
  5.     // Fields      
  6.     private TranOrders tranOrders;  
  7.   
  8.     @OneToOne(fetch = FetchType.LAZY,optional=false)  
  9.     @JoinColumn(name = "TSP_ID",unique=true)  
  10.     public TranOrders getTranOrders() {  
  11.         return this.tranOrders;  
  12.     }  
  13.   
  14.     public void setTranOrders(TranOrders tranOrders) {  
  15.         this.tranOrders = tranOrders;  
  16.     }  
  17. }  


TranCar.java(子类)

Java代码  错误Batch update returned unexpected row count from update [0]; actual row count: 0;
  1. @Entity  
  2. @Table(name = "TSPRO_TRAN_CAR")  
  3. public class TranCar implements java.io.Serializable {  
  4.   
  5.     // Fields      
  6.     private TranOrders tranOrders;  
  7.    
  8.     @OneToOne(fetch = FetchType.LAZY,optional=false)  
  9.     @JoinColumn(name = "TSP_ID",unique=true)  
  10.     public TranOrders getTranOrders() {  
  11.         return this.tranOrders;  
  12.     }  
  13.   
  14.     public void setTranOrders(TranOrders tranOrders) {  
  15.         this.tranOrders = tranOrders;  
  16.     }  
  17. }  


Action(调用):

Java代码  错误Batch update returned unexpected row count from update [0]; actual row count: 0;
    1. public String saveTranOrders() {  
    2.         String tranItemId=super.getRequest().getParameter("tranItemId");  
    3.         String tranCarId=super.getRequest().getParameter("tranCarId");  
    4.         String loginUserId = (String) getSession().getAttribute(Constant.LOGIN_USER_ID);  
    5.           
    6.         //时间转换  
    7.         String loadSort=super.getRequest().getParameter("loadSort");  
    8.         String reachTime=super.getRequest().getParameter("reachTime");  
    9.         String wzdTime=super.getRequest().getParameter("wzdTime");  
    10.           
    11.         SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时");  
    12.           
    13.           
    14.         try {  
    15.             if(tranOrders!=null){  
    16.                 tranOrders.setLoadSort(new Timestamp(sdf.parse(loadSort).getTime()));  
    17.                 tranOrders.setReachTime(new Timestamp(sdf.parse(reachTime).getTime()));  
    18.                 tranOrders.setWzdTime(new Timestamp(sdf.parse(wzdTime).getTime()));  
    19.                 if(BeanUtils.isNotEmpty(tranItemId)){  
    20.                     tranItem.setId(tranItemId);  
    21.                 }  
    22.                 if(BeanUtils.isNotEmpty(tranCarId)){  
    23.                     tranCar.setId(tranCarId);  
    24.                 }  
    25.                   
    26.                 tranCar.setTranOrders(tranOrders);  
    27.                 tranOrders.setTranCar(tranCar);  
    28.                   
    29.                 tranItem.setTranOrders(tranOrders);  
    30.                 tranOrders.setTranItem(tranItem);  
    31.                   
    32.                 if(BeanUtils.isNotEmpty(tranOrders.getId())){  
    33.                     tranOrders.setUpdateBy(loginUserId);  
    34.                     tranOrders.setUpdateDate(new Timestamp(System.currentTimeMillis()));  
    35.                     tranOrdersManager.update4ClearCurrSession(tranOrders);  
    36.                 }  
    37.                   
    38.                 tranOrders.setCreateBy(loginUserId);  
    39.                 tranOrders.setCreateDate(new Timestamp(System.currentTimeMillis()));  
    40.                 tranOrdersManager.save(tranOrders);  
    41.                 writerPrint("1");  
    42.             }else  
    43.             writerPrint("0");  
    44.         } catch (Exception e) {  
    45.             e.printStackTrace();  
    46.             writerPrint("2");  
    47.         }  
    48.         return NONE;  
    49.   
    50.     } 
上一篇:Android数据库小技巧


下一篇:一起谈.NET技术,Silverlight 游戏开发小技巧:传说中的透视跑马灯