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.
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值