錯誤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代碼   收藏代碼
  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代碼   收藏代碼
  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代碼   收藏代碼
  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代碼   收藏代碼
    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.     } 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM