hibernate在删除对象之前为什么要先做一次查询
2个回答
展开全部
也可以直接执行sql的delete语句,当然,用ID查出来以后删除也是一种方法。
如果是一个对象的话,推荐还是使用这种方法,因为你在删除这个对象时,上下文中肯定已经有这个对象的引用了,直接调用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;
如果是一个对象的话,推荐还是使用这种方法,因为你在删除这个对象时,上下文中肯定已经有这个对象的引用了,直接调用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;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
引用郑妊昂的回答:
也可以直接执行sql的delete语句,当然,用ID查出来以后删除也是一种方法。
如果是一个对象的话,推荐还是使用这种方法,因为你在删除这个对象时,上下文中肯定已经有这个对象的引用了,直接调用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;
也可以直接执行sql的delete语句,当然,用ID查出来以后删除也是一种方法。
如果是一个对象的话,推荐还是使用这种方法,因为你在删除这个对象时,上下文中肯定已经有这个对象的引用了,直接调用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;
展开全部
因为不查询,配置文件中的级联设置会出问题。比如删除customer,
级联设置原理:cascade="all"。如果级联原则all。hibernate在删除时,先删除外键表内容,再删除主表。如下:customer(主表),orde(外表)
Hibernate: delete from orde where id=?
Hibernate: delete from orde where id=?
Hibernate: delete from customer where id=?
如果不查询,这里面只有customer.id有数据,而orde.id没数据。执行sql语句就会出问题。
最后:自己试出来才是王道,网上的答案乱七八糟的。实践是检验真理的唯一标准。
级联设置原理:cascade="all"。如果级联原则all。hibernate在删除时,先删除外键表内容,再删除主表。如下:customer(主表),orde(外表)
Hibernate: delete from orde where id=?
Hibernate: delete from orde where id=?
Hibernate: delete from customer where id=?
如果不查询,这里面只有customer.id有数据,而orde.id没数据。执行sql语句就会出问题。
最后:自己试出来才是王道,网上的答案乱七八糟的。实践是检验真理的唯一标准。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询