`

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(父类):
@Entity
@Table(name = "TSPRO_TRAN_ORDERS")
public class TranOrders implements java.io.Serializable {

	// Fields    
	private TranItem tranItem;
	private TranCar tranCar;

	/** default constructor */
	public TranOrders() {
	}


	@OneToOne(cascade=CascadeType.ALL,mappedBy="tranOrders",fetch=FetchType.LAZY,optional = true) 
	@JoinColumn(name="id",unique=true) 
	public TranItem getTranItem() {
		return tranItem;
	}

	public void setTranItem(TranItem tranItem) {
		this.tranItem = tranItem;
	}

	@OneToOne(cascade=CascadeType.ALL,mappedBy="tranOrders",fetch=FetchType.LAZY,optional = true) 
	@JoinColumn(name="id",unique=true) 
	public TranCar getTranCar() {
		return tranCar;
	}

	public void setTranCar(TranCar tranCar) {
		this.tranCar = tranCar;
	}

 
}

TranItem.java(子类)
@Entity
@Table(name = "TSPRO_TRAN_ITEM")
public class TranItem implements java.io.Serializable {

	// Fields    
	private TranOrders tranOrders;

	@OneToOne(fetch = FetchType.LAZY,optional=false)
	@JoinColumn(name = "TSP_ID",unique=true)
	public TranOrders getTranOrders() {
		return this.tranOrders;
	}

	public void setTranOrders(TranOrders tranOrders) {
		this.tranOrders = tranOrders;
	}
}

TranCar.java(子类)
@Entity
@Table(name = "TSPRO_TRAN_CAR")
public class TranCar implements java.io.Serializable {

	// Fields    
	private TranOrders tranOrders;
 
	@OneToOne(fetch = FetchType.LAZY,optional=false)
	@JoinColumn(name = "TSP_ID",unique=true)
	public TranOrders getTranOrders() {
		return this.tranOrders;
	}

	public void setTranOrders(TranOrders tranOrders) {
		this.tranOrders = tranOrders;
	}
}

Action(调用):
public String saveTranOrders() {
		String tranItemId=super.getRequest().getParameter("tranItemId");
		String tranCarId=super.getRequest().getParameter("tranCarId");
		String loginUserId = (String) getSession().getAttribute(Constant.LOGIN_USER_ID);
		
		//时间转换
		String loadSort=super.getRequest().getParameter("loadSort");
		String reachTime=super.getRequest().getParameter("reachTime");
		String wzdTime=super.getRequest().getParameter("wzdTime");
		
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时");
		
		
		try {
			if(tranOrders!=null){
				tranOrders.setLoadSort(new Timestamp(sdf.parse(loadSort).getTime()));
				tranOrders.setReachTime(new Timestamp(sdf.parse(reachTime).getTime()));
				tranOrders.setWzdTime(new Timestamp(sdf.parse(wzdTime).getTime()));
				if(BeanUtils.isNotEmpty(tranItemId)){
					tranItem.setId(tranItemId);
				}
				if(BeanUtils.isNotEmpty(tranCarId)){
					tranCar.setId(tranCarId);
				}
				
				tranCar.setTranOrders(tranOrders);
				tranOrders.setTranCar(tranCar);
				
				tranItem.setTranOrders(tranOrders);
				tranOrders.setTranItem(tranItem);
				
				if(BeanUtils.isNotEmpty(tranOrders.getId())){
					tranOrders.setUpdateBy(loginUserId);
					tranOrders.setUpdateDate(new Timestamp(System.currentTimeMillis()));
					tranOrdersManager.update4ClearCurrSession(tranOrders);
				}
				
				tranOrders.setCreateBy(loginUserId);
				tranOrders.setCreateDate(new Timestamp(System.currentTimeMillis()));
				tranOrdersManager.save(tranOrders);
				writerPrint("1");
			}else
			writerPrint("0");
		} catch (Exception e) {
			e.printStackTrace();
			writerPrint("2");
		}
		return NONE;

	}
分享到:
评论

相关推荐

    Spring JdbcTemplate.batchUpdate 例子

    `JdbcTemplate`的`batchUpdate`方法就是用来实现这样的功能,它可以批量执行更新语句,如INSERT、UPDATE或DELETE。 `batchUpdate`方法的基本使用如下: ```java int[] result = jdbcTemplate.batchUpdate( ...

    batchupdate

    sqlhelper工具,batchupdate方法

    mysql-batch:小批量运行大型MySQL UPDATE和DELETE查询,以防止表行级锁定

    安装 pip3 install mysql_batchUPDATE示例您可以使用可用的模式运行此示例以下示例与以下更新相同: UPDATE batch_test SET date = NOW() WHERE number > 0 . 2 AND date is NULL ; 这等效于以20行为批处理此更新: ...

    mybatis执行批量更新batch update 的方法(oracle,mysql两种)

    在MyBatis中,批量更新(batch update)是一种提高数据库操作效率的重要手段,尤其是在处理大量数据更新时。这里我们将详细探讨如何在Oracle和MySQL数据库中使用MyBatis进行批量更新。 1. **Oracle数据库的批量更新...

    Hibernate错误及解决办法集合

    **问题描述**:执行Hibernate查询语句时,系统提示`Unknown column 'notice0_.myPublishDate' in 'field list'`错误。 **可能原因**:该错误表示Hibernate尝试从数据库中查询一个不存在的字段,通常是由于实体类...

    Acount_batch.rar_acount_batch

    标题"Acount_batch.rar_acout_batch"暗示我们正在处理一个与账户管理和批量处理相关的软件工具,其核心是一个批处理脚本(Acount_batch.bat)。批处理是Microsoft Windows操作系统中的一种脚本编写方式,允许用户...

    cia转cci工具:Batch CIA 3DS Decryptor.zip

    "Batch CIA 3DS Decryptor.zip" 是一个专门用于批量处理CIA转CCI的工具包,它包含了所需的所有组件。 首先,我们来看一下这个压缩包内的文件: 1. **Batch CIA 3DS Decryptor.bat**:这是一个批处理脚本,用户可以...

    ibatis应对批量update

    executor.update("test.batchUpdate", item); } executor.executeBatch(); return null; } } ); } } catch (Exception e) { // 处理异常 } ``` 5. **注意事项**: - 确保数据库驱动支持批量更新功能。 -...

    The Definitive Guide to Spring Batch, 2nd Edition.epub

    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...

    word-count-spring-batch-partitioning:使用 Spring Batch 在 PDF 文件中实现计数词遵循 MasterSlave 模型

    word-count-spring-batch-partitioning 使用 Spring Batch 在 PDF 文件中实现计数词遵循 Master/Slave 模型主/从模型字数统计算法设置、构建和运行初始化数据库创建用于存储 word-count 和 word-count-repository 的...

    Batch Normalization: Accelerating Deep Network Training by Reducing

    这篇论文的核心思想是引入批量归一化(Batch Normalization,BN)技术,旨在解决深度神经网络训练过程中遇到的内部协变量漂移问题,从而提高模型的训练速度和性能。 内部协变量漂移是指随着神经网络层数加深,每一...

    Batch Normalization:Accelerating Deep Network Training

    **批量归一化(Batch Normalization):加速深度网络训练** 在深度学习领域,Batch Normalization是一种被广泛采用的技术,其主要目标是通过减少内部协变量漂移(Internal Covariate Shift),来加速神经网络的训练...

    bank-spring-batch:具有多处理器的Spring Batch项目

    【Spring Batch简介】 Spring Batch是Spring框架的一个模块,专门用于处理批量处理任务。它提供了一套强大、可扩展且易用的工具,用于处理大量数据的读取、处理和写入操作。Spring Batch的设计目标是解决企业级批量...

    Delphi_3_recive_send_batch_simple_sms_

    function SendSimpleSMS(const usernamepassword:string;to_: ArrayOfString;fromtext: string; const isflash: Boolean): ArrayOfString;function SendSimpleSMS2(const... const count: Integer): ArrayOfMessagesBL;

    batch_decision_tree_决策树计算_决策树_batch_影像数据_

    本主题主要关注批量决策树(Batch Decision Tree)的计算及其在影像数据中的应用。 决策树算法基于一系列规则对数据进行分割,通过构建树状结构来做出预测或决策。在遥感领域,决策树可以用来解析影像数据,如识别...

    doc转chm工具:Batch DOC TO CHM Generator v2009.1.106.1341

    《批量DOC转CHM生成器:Batch DOC TO CHM Generator v2009.1.106.1341》 在信息技术领域,文档的格式多种多样,每种格式都有其特定的用途和优势。例如,DOC是Microsoft Word的默认文档格式,广泛用于文本编辑和排版...

    core-data-batch-update:核心数据 NSBatchUpdateRequest Swift 实现

    print("Error during batch update: \(error)") } } ``` 四、与常规更新比较 常规更新通常涉及加载对象到内存,修改属性,然后保存回磁盘。这种方法在处理少量数据时是可行的,但当数据量大时,内存消耗和效率...

    微软内部资料-SQL性能优化3

    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?

    Batch,Batch,Batch":What does it really mean? 对渲染中dc的消耗的讲解

    Applying S88 batch control from a user's prspective .pdf

    从给定的文件信息来看,本文主要涉及S88批处理控制的知识,并且是从使用者的视角来探讨。S88批处理控制标准由国际测量和控制学会(ISA)提出,旨在提供一个通用的批处理控制系统设计、实施和操作的框架,主要被应用...

Global site tag (gtag.js) - Google Analytics