hibernateTemplate update 只更新被修改字段

 

如果你用hibernateTemplate操作数据库,感觉的确很省代码,一行代码解决数据库增改删查,但当你做到一个功能只更新一个字段,你就有点懵逼了,怎么试就是不行,总的就是下面的异常报错。

当你用hibernateTemplate模板去update或者saveOrUpdate某个对象的时候发现报某字段不能为空的异常,而你的封装对象属性里却实做了某字段的修改,一时就蒙了。其实也不难发现,一般你设置数据库表的时候,都会把所有字段有意无意的加上not null的定义。所以当你用update或者saveOrUpdate去更新时那肯定空异常呀!

那么我们应该怎么去只更新做了修改的字段,又不更新没有修改的字段呢?如果往你的not null上想,不难想到,思路是这样的:先根据你返回的id去查询全部信息,然后把要更改的字段信息set进去,再update数据。

原理是因为你字段set进去直接更新肯定是更新成功的,但是其他的由于延迟加载,新数据没有se进去。所以就保持原样(灵活性强,方便)。

实现如下:

@Override
/**
 * 房间入住信息更改
 */
public int chechInRoom(int id, String flag) throws Exception {

	try {
		// 根据id查询房间
		Room room = this.hibernateTemplate.get(Room.class, id);
		// 设置房间已入住
		room.setFlag(flag);
		// 更新房间信息
		this.hibernateTemplate.update(room);
		return 1;
	} catch (Exception e) {
		return 0;
	}
}

有人可能会使用hibernate 的原生sql把所有字段都更改一遍,这个思路也不能说错,一开始我也尝试了一下,再细想这样要是我们有字段类似是文本类型,这个类型存储的内容是几千,几万字,这样效率会很低。

我个人还是比较喜欢用mybatis的动态代理。模板虽然简洁,但还是比不上sql的可塑性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值