hibernate delete 删除对象

木木水夕 2011-03-08 09:47:25
hibernate 中delete方法删除对象的时候,这个delete方法会转化为一条delete的sql语句,请问这个sql里的where条件部分是只有主键相等,还是每个列值都相等。
如下例:
Userinfo 类有userid ,username,userdescription这几个属性,对应数据库中的userinfo这张表 userid为主键
执行session.delete(Userinfo )的时候,会执行那种sql
类似这样的:delete * from Userinfo where userid=userid
还是:delete * from Userinfo where userid=userid && username=username && userdescription= userdescription
有源码的贴上一段让看看,谢了。

...全文
3186 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
多一点点 2011-06-01
  • 打赏
  • 举报
回复
Hibernate中的delete方法是根据主键删除的!
木木水夕 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 woshigaoshou980 的回复:]
hibernate 所有的包都在这 任何版本的都有

http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/h/project/hi/hibernate/hibernate3/
[/Quote]
谢了啊。。。我去看看。。。
  • 打赏
  • 举报
回复
3.6.0.Beta1 22-Jul-2010 97.8M of files inside
3.6.0.Beta2 05-Aug-2010 98.1M of files inside
3.6.0.Beta3 19-Aug-2010 56.8M of files inside
3.6.0.Beta4 02-Sep-2010 98.4M of files inside
3.6.0.CR1 16-Sep-2010 98.4M of files inside
3.6.0.CR2 30-Sep-2010 98.9M of files inside
3.6.0.Final 14-Oct-2010 255.1M of files inside
木木水夕 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 how8586 的回复:]
感觉session.delete(Userinfo)应当会执行这样的sql:delete from userinfo 。把表中的所有数据都删除。 想根据主键删除一条记录可以这样做吧:

Java code
void deleteById(Class clazz,String Id){
getHibernateTemplate().delete(get(clazz,Id));
}
obj……
[/Quote]
你这个是不对的。。。不是执行这样的,delete方法穿进去的是一个对像相当于数据库中一条记录,怎么会把表中所有数据都删除了哪?我刚看了一下log里出来的日志,确实是按照主键删除的
木木水夕 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kai27ks 的回复:]
源码我发到你邮箱了。查收
[/Quote]


估计是我没有说清楚,我是想要能看到hibernate源码的jar吧,就像可以用spring-sources.jar 查看spring源代码的这样的jar。。。貌似该是hibernate-sources.jar
yukiMark 2011-03-08
  • 打赏
  • 举报
回复
感觉session.delete(Userinfo)应当会执行这样的sql:delete from userinfo 。把表中的所有数据都删除。 想根据主键删除一条记录可以这样做吧:
void deleteById(Class clazz,String Id){
getHibernateTemplate().delete(get(clazz,Id));
}
object get(Class entity, Serializable id){
return getHibernateTemplate().get(entity, id);
}
在删除一条记录的时候的时候直接调用 deleteById(Class clazz,String Id)方法就可以了吧
木木水夕 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kai27ks 的回复:]
源码我发到你邮箱了。查收
[/Quote]
哥们你给我发的啥啊
就这个吗?
这是你要的源码。



--


礼!

kai27ks


  • 打赏
  • 举报
回复
delete(HQL) 删除查找到的对象。

delete(object) 直接删除一个对象。

============================
代码呵~~~

方法一:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

SomeObject someObject = (SomeObject)sesson
.get(SomeObject.class,new Long(1));
session.delete(someObject);

tx.commit();
session.close();

方法二
中间的删除换成
session.delete("from SomeOjbect o where o.id>1");
木木水夕 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kai27ks 的回复:]
源码我发到你邮箱了。查收
[/Quote]
谢了,够速度。。。哈哈
  • 打赏
  • 举报
回复
delete()方法用于从数据库中删除与Java对象对应的记录。如果传入的参数是持久化对象,Session就计划执行一个delete语句。如果传入的参数是游离对象,先使游离对象被Session关联,使它变为持久化对象,然后计划执行一个delete语句。值得注意的是,Session只有在清理缓存的时候的才执行delete语句。此外,只有当调用Session的close()方法时,才会从Session的缓存中删除该对象。

例如以下代码先加载一个持久化对象,然后通过delete()方法将它删除:

Session session1 = sessionFactory.openSession();

Transaction tx1 = session1.beginTransaction();

// 先加载一个持久化对象

Customer customer = (Customer)session.get(Customer.class, new Long(1));

session.delete(customer); // 计划执行一个delete语句

txt1.commit(); // 清理缓存,执行delete语句

session.close();子// 从缓存中删除Customer对象
以下代码直接通过delete()方法删除一个游离对象:

Session session2 = sessionFactory.openSession();

Transaction tx2 = session1.beginTransaction();

// 假定customer是一个游离对象,先使它被Session关联,使它变为持久化对象,

// 然后计划执行一个delete语句

session2.delete(customer);

tx2.commit(); // 清理缓存,执行delete语句

session2.close(); // 从缓存中删除customer对象
如果希望删除多个对象,可以使用另一种重载形式的delete()方法:

session.delete("from Customer as c where c.id>8");
以上delete()方法的参数为HQL查询语句,delete()方法将从数据库中删除所有满足查询条件的记录。
kai27ks 2011-03-08
  • 打赏
  • 举报
回复
源码我发到你邮箱了。查收
  • 打赏
  • 举报
回复


hibernate 包 下载
http://down.51cto.com/data/72146/ 注册一个号就可以下载啦




Hibernate核心包 介绍(不是下载) http://wenku.baidu.com/view/5f65b42e0066f5335a8121bb.html



希望对你有帮助
木木水夕 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 woshigaoshou980 的回复:]
不过 一般情况下都不用删除,为了以后能查询历史记录,所以一般不采取删除,都是用修改,
UPDATE EMPLOYEEINFO SET EMP_STATE=0 让 state 状态设置成 0 ,

默认情况下表的state字段是 1

所以查询的时候 用 select * from user where state=1





希望对你有帮助
[/Quote]
这个我知道的。。。还是谢了啊
liguangwen86 2011-03-08
  • 打赏
  • 举报
回复
主键相同就删除,因为主键是唯一的
木木水夕 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dream1210 的回复:]
session.delete(Userinfo )
删除实体的时候 用的是主键删除
[/Quote]
有没有源码可以看下?
不善^ 2011-03-08
  • 打赏
  • 举报
回复
控制台 会有 打印语句的 你看下 分析一下
  • 打赏
  • 举报
回复
不过 一般情况下都不用删除,为了以后能查询历史记录,所以一般不采取删除,都是用修改,
UPDATE EMPLOYEEINFO SET EMP_STATE=0 让 state 状态设置成 0 ,

默认情况下表的state字段是 1

所以查询的时候 用 select * from user where state=1





希望对你有帮助
木木水夕 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 woshigaoshou980 的回复:]
delete * from Userinfo where userid=userid 这样的
[/Quote]
我想着也是这样的,
有没有像spring-sources.jar 这样的关于hibernate的jar,刚在网上搜了没收到。。。有的话给我发份吧,duanjianmin@126.com 40分都给你了。。
哈哈
dream1210 2011-03-08
  • 打赏
  • 举报
回复
session.delete(Userinfo )
删除实体的时候 用的是主键删除
加载更多回复(1)

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧