`

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代码 
@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. 
   } 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics