hibernate 删除 用不用先按ID把对象查出来 在删除??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate 删除 用不用先按ID把对象查出来 在删除??相关的知识,希望对你有一定的参考价值。
如题
但是 比如如下代码
int id = request.getParameter("id");
TCar car = new TCar();
car.setId(id) ;
CarDAO c = new CarDAO();
c.delete(car);
也是可以删除的 为什么啊?
这样做只能删除一条 在删除第二条的话就抛错 a different object with the same identifier value was already associated with the session
但是如果我先把car 对象 按ID加载上来 在删的话 就正常了
下面是正常的代码
int id = request.getParameter("id");
TCar car = new TCar();
CarDAO c = new CarDAO();
car = c.findCar(id);//这个方法就是按id 利用Hibernate get方法获取的car 对象
c.delete(car);
如果是一个对象的话,推荐还是使用这种方法,因为你在删除这个对象时,上下文中肯定已经有这个对象的引用了,直接调用delete方法就好,这样也符合ORM的理念。
当然,有时也会有批量删除的需求。
下面是一种批量删除的方法。
public int deleteBrands(Long[] delBrandId)
Session session = getSession();
Transaction tx = session.beginTransaction();
StringBuffer sql = new StringBuffer();
sql.append("delete Brand where brandId in ( :brandId) ");
Query query = session.createQuery(sql.toString());
query.setParameterList("brandId",delBrandId);
int dels = query.executeUpdate();
tx.commit();
return dels;
但是,按javaeye上的大神的说法,hibernate的批量删除做的很不好,建议还是使用jdbc的好。
http://www.javaeye.com/topic/265
PS:
a different object with the same identifier value was already associated with the session
hibernate在比较两个对象是否同一对象时,是按ID来比较的,这样的话,你可以用第一种方法删除,hibernate根据你那个ID就可以找到那个对象了。
hibernate的一次session中,不允许存在两个对象有同一个id,如果存在将产生很多的并发问题。 参考技术A 对,因为你要保证数据库里面有这个对象。 参考技术B 要找到数据库表里对应的主键才能删 参考技术C hibernate 删除 用不用先按ID把对象查出来 在删除??
用不用都行,看你想删什么样的!
hibernate 多对多操作(级联操作)
一、级联保存
分别在用户和角色配置文件中在set标签中加入cascade="save-update";
示例:添加同时添加用户对象和角色对象并关联两个对象:
只需将角色放入用户对象,只保存用户对象即可。
二、级联删除
在set标签中加入cascade="delete";
示例删除ID是3的user对象
需注意的是,这种方式一般不用,因为删除id=3的user对象,会将与次user有关的role对象(role中外键等于3)删除。
三、维护第三张表
示例
使id=2的用户拥有id=3的角色
使id=2的用户不在拥有id=3的角色
以上是关于hibernate 删除 用不用先按ID把对象查出来 在删除??的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate 多对一和一对多嵌套,会查出很多数据怎么办