hibernate oo疑惑?

1.持久对象
 Person aPerson=new Person();//内存中建立空间
aPerson=dao.findbyid(new Long(x));//将此对象放到此空间内
而aPerson为持久对象,也就是说,对它的改动相当于是改数据库.

 多用户情况下,内存处理机制是怎样的?
要维持对象的持久性,要付出什么代价呢?
2.实现一个多条件的查询,除了用hql,sql外,还有什么办法呢?有了他们就不叫oo了吗?
我个人理解是,oo核心在设计模式.在于算法复用.松耦合,易于维护及扩展.

请各位高手给于说明与指正? 多谢!

为帮助你理解,打个比喻:你在火车站要把行李寄存,行李就相当于aPerson,你把行李给寄存处寄存,相当OO持久化保存到数据库;你从寄存处拿出行李,相当于findbyid从数据库获得对象。

这样,你思考几个问题:在这个过程中:寄存处的职责是什么?完整拷贝不走样的保存你的行李,然后再归还你的行李,至于你拿了行李后,还和寄存处有任何关系吗?或者你想让寄存处多做一些应该你做的事情,比如打开行李拿出一些东西再打成包(类似与使用SQL语句完成很多业务功能),可以吗?

为什么要寄存,也就是为什么要持久化?那是因为计算机要掉电,掉电后,内存中对象信息就没有了,所以需要抗掉电。

再打个比喻:企业系统其实和桌面系统很类似,桌面系统中我们编辑文本,为防止文字丢失,经常要save一下,同样,企业系统中,为防止业务对象丢失,就需要save一下,至于如何save,save的格式则不是我们业务程序员关心的了。

在桌面系统中,如果操作系统给你保存在文件也可以,保存成数据库也可以,保存成word文档或Excel都可以,你无需关心save这个具体过程。同样,在企业系统中,关系数据库也只是对象保存的一个媒介,可以以XML保存在硬盘上,都可以,Hibernate就是一个使用关系数据库保存对象的软件,就象桌面系统中notepad是用txt保存你的文字业务对象,word软件是用doc格式保存你的文字业务对象一样。

我们为什么对数据库容易接受,准确理解,而却无法理解OO是什么,都是和我们教育背景有关,所以,使用Hibernate实际上是一个重新学习软件的过程。不要着急。慢慢来,先准确理解OO,如从Evans DDD开始学习业务对象,而不是业务数据表。

板桥大哥多谢指点.
1.我明白对对象的状态是要通过对对象的操作来实现的.如上例,我清楚寄存处仅仅是一个 对象状态存储地.
2.如上例我在寄存处存有n个包,有m个是红色的,m个中 有k个是男式的,我要从寄存处提出来,是不是要用hql或sql?我没有想到其它办法.
程序中势必存在了sql语句,难道这样违背oo原则吗?dao实现了基本对象提取方式,但是并不能全部概括.
我一个同学在看到我写的程序中存在sql语句,他说我根本不懂oo,所以我提出上述问题.
3.另外,板桥大哥,我想知道,您能从我提出的问题中看出我现在存在那些oo思想上的不足?

>他说我根本不懂oo
他说的有道理,其实我前面已经指出OO思想不足,只是你没有明白,所以,你需要更多学习。也不要生气和害怕,因为80%人都和你一样,不同的是他们都没有意识到,而你已经意识到。
[该贴被banq于2007-11-07 12:30修改过]