hibernate在删除对象之前为什么要先做一次查询

 我来答
撕掉曾经的记忆9z
推荐于2017-10-26 · TA获得超过129个赞
知道小有建树答主
回答量:415
采纳率:0%
帮助的人:204万
展开全部
也可以直接执行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;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是热咯哦
2017-10-26
知道答主
回答量:7
采纳率:0%
帮助的人:6377
引用郑妊昂的回答:
也可以直接执行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语句就会出问题。
最后:自己试出来才是王道,网上的答案乱七八糟的。实践是检验真理的唯一标准。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式