把发开过程中碰到的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.
}
分享到:
相关推荐
sqlhelper工具,batchupdate方法
NULL 博文链接:https://rayfuxk.iteye.com/blog/2286519
本人做系统时遇到的一些Hibernate问题及解决方案。
主要介绍了mybatis执行批量更新batch update 的方法,提供oracle和mysql两种方法,非常不错,需要的朋友参考下
安装 pip3 install mysql_batchUPDATE示例您可以使用可用的模式运行此示例以下示例与以下更新相同: UPDATE batch_test SET date = NOW() WHERE number > 0 . 2 AND date is NULL ; 这等效于以20行为批处理此更新: ...
用批处理实现帐号登记本软件,能够登记并查询信息,并且将数据隐藏在回收站的目录下。
cia转cci工具:Batch CIA 3DS Decryptor.zip
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
The Definitive Guide to Spring Batch takes you from the “Hello, World!” of batch processing to complex scenarios demonstrating cloud native techniques for developing batch applications to be run on...
Applying S88 batch control from a user's perspective
bank-spring-batch:具有多处理器的Spring Batch项目
Batch Normalization:Accelerating Deep Network Training
word-count-spring-batch-partitioning 使用 Spring Batch 在 PDF 文件中实现计数词遵循 Master/Slave 模型主/从模型字数统计算法设置、构建和运行初始化数据库创建用于存储 word-count 和 word-count-repository 的...
ANSI ISA 88.00.04-2006 Batch Control Part 4:Batch Production Rec
catalyst-plugin-server-jsonrpc-batch:Catalyst :: Batch —批量请求实现Catalyst JSON-RPC服务器插件
function SendSimpleSMS(const usernamepassword:string;to_: ArrayOfString;fromtext: string; const isflash: Boolean): ArrayOfString;function SendSimpleSMS2(const... const count: Integer): ArrayOfMessagesBL;
Byte 0: Flag – 0x00 Byte 1: Resource Type – 0x07 (Key) Byte 2-3: DBID – 0x0005 Byte 4-7: ObjectID – 0x 75D7831F (1977058079) Byte 8-9: IndexID – 0x0001 Byte 10-16: Hash Key value – 0x 02014F0...
Batch,Batch,Batch":What does it really mean? 对渲染中dc的消耗的讲解
一个把指定目录下所有windows更新文件自动安装的小工具,省着自己一个个去点更新文件了,这个软件比批处理文件好的一点就是批处理文件还要手动去添加路径和文件,这个不用制定一个目录后自动查找系统还没有安装过的...
Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour