hibernate里主键是自动生成的,想update这个对象
我的表里的主键是自动生成的,所以hibernate。saveOrUpdate方法报主键不唯一错误,我之前是先删表里的数据,再saveOrUpdate了,这样每次执行的是i...
我的表里的主键是自动生成的,所以hibernate。saveOrUpdate方法报主键不唯一错误,我之前是先删表里的数据,再saveOrUpdate了,这样每次执行的是insert语句,也没有错误(主键是自动生成)。现在需求改 了,表数据不能删,对原来表数据进行更改。
问题:由于我要更新list《我的表》集合,我现在想的是update 我的表 set 1,set2,set3,set4.。。。set21.。。where。。。这样可以实现但更新字段太多。。。。有没有直接更新这个对象的方法。。。
求大神帮助啊,在线等
我表里的主键是以序列形式生成的。
补充问题:所谓的hibernate自带的更新方法前提条件是有id,我这里由于业务需求,前系统没往我这里传id,但根据其他字段定位到一个内容。只能自己写方法或者修改配置文件。
目前我想到的方法只是先根据传来字段定位到一个对象,然后取id 再用hibernate。update。
有没有比这个更好的,更实际的好方法,比如修改配置文件或者其它等 展开
问题:由于我要更新list《我的表》集合,我现在想的是update 我的表 set 1,set2,set3,set4.。。。set21.。。where。。。这样可以实现但更新字段太多。。。。有没有直接更新这个对象的方法。。。
求大神帮助啊,在线等
我表里的主键是以序列形式生成的。
补充问题:所谓的hibernate自带的更新方法前提条件是有id,我这里由于业务需求,前系统没往我这里传id,但根据其他字段定位到一个内容。只能自己写方法或者修改配置文件。
目前我想到的方法只是先根据传来字段定位到一个对象,然后取id 再用hibernate。update。
有没有比这个更好的,更实际的好方法,比如修改配置文件或者其它等 展开
6个回答
展开全部
你一定没有系统的学过hibernate
下列语句可以直接更新对象。
session.beginTransaction();
User user = session.xxxx//从数据库获取对象。
user.setPassword("xxxx");
session.getTransaction().commit();
原因,事务内“持久态”对象的变化会被更新到数据库。
自己百度 持久态、瞬态、托管态
下列语句可以直接更新对象。
session.beginTransaction();
User user = session.xxxx//从数据库获取对象。
user.setPassword("xxxx");
session.getTransaction().commit();
原因,事务内“持久态”对象的变化会被更新到数据库。
自己百度 持久态、瞬态、托管态
更多追问追答
追问
您好 持久化对象成立的前提是 主键能找到的,而我这里主键是自动生成的当查出这个对象时候id=null 因为上一个系统过来时候没有这个id,所以hibernate执行update时候报错。谢谢
追答
你主键是自动生成的没错,你查询出来的对象应该带着ID才对。
先查询获取,然后修改。
------------
查询时不是基于ID,而是基于逻辑主键。
如
class User {
long id,String username,String password;
}
基于username查询。
展开全部
我觉得你的方法就是应该用的方法,除非主键由程序员自己来维护,但这样容易出错。当主键自动生成时,就得像你说的那样先根据条件查询出来,再更改!另外,我并不觉得这样写代码很麻烦,因为sql语句在代码中只需要写一次,又不是多次都要这样!还有,由于sql优化的需要,要提高sql语句的执行效率,更是要求代码的中的sql语句要写全,即要将你要插入的列名全部写上,而不是由于你要全部插入可以省略列名不写。
追问
我这里要更新的是list《T》集合,而每次对一个对象,先查出id 再更新这个对象,很明显效率很低很低,再说我这里的集合都是好几万好几万的对象。如果用hibernate的saveorupdate它会再最后一期直接更新,明显效率高很多,我这里还得找其它更好的方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的数据是从数据库里面查询到的,既然你数据已经存入到数据库中,那自动生成的ID也存入到数据库中,那么你修改的时候就需要先查询到数据,再去修改。如果你查询的时候获得不到ID,那就是你数据有问题,你这个地方需要处理的就不是修改的问题,而是数据查询的问题了!
追问
我的数据是从excel模板读出来的,POI那个,而当时开发时候我没有在excel保存id,现在上传excel模板往表里保存时候由于老逻辑先删再insert,当很多用户同时上传报了错误,现在要求是不能删只是update,而id只能是空。。。因为模板不能再改了。但刚才测试了好像能根据几个字段查出一个对象的id,再更新。。只是太麻烦了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-02-08
展开全部
直接用update方法来更新数据啊,只要把你修改之后的对象作为参数传进去就好了,hibernate会根据你传给他的参数的主键值去更新表中的数据的
追问
这里传来时候没有id- - 上面说的很明确了啊。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-02-08
展开全部
hibernate不是可以直接更新一个对象吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询