有了hibernate是否还需要Dao?

最近学习使用struts2+Hibernate,也是分层,web层里放struts2的action
service层里放业务逻辑对象,持久层里放的是dao+po,对po操作基本放到了dao里,可以我不解的是使用hibernate的方法我返回本身就是po,为什么大家写程序的时候还写dao呢?我的dao里对po的操作几乎把它细分到了一个方法仅仅一次crud,我通过调用不同的dao里多次方法来实现业务中需要对不同的po进行多次的crud操作的情况,每调用一次dao的一个方法开个session然后对po进行一次crud操作又关session,那么session的缓存不是基本没什么作用了吗?还有一个问题就是通常po对应了一dao又对应了一service,我的dao的方法分的比较细(一个方法仅仅对po进行一次crud),我感觉我的service里仅仅只是重复调用了一遍dao的方法,然后在action中调用service层里不同的service对象实现稍微复杂的业务,我想过是不是service是用来把不同的dao的方法结合起来实现业务中需要对不同的po进行多次的crud操作的情况?这样在action中只要调用service中的方法那action里的代码就清爽了。但是我的action我也分的比较的细,一个action只针对用户的一步操作(多步操作可以用action chain串起来),一个页面可以有不同的action为用户不同的请求服务,action也是根据用户的一步操作命的名,我觉得根本不要把对action的多次操作的这样的业务放到service中,我想去掉service层直接在action中调用dao,原因是我的action是根据用户的一步业务操作命名,作为业务逻辑也好理解,几步操作可以用action chain,原因二是少了service层不用把数据又传到service层再调用一遍,原因三按照 黑体部分(见上面) 的考虑service到是有事情干了,可action干什么呢,难道是为了调service而存在的吗??关于web+service+dao+po这样的分层大家能能简单的说明下那三层究竟各负责什么,另外我知道要根据项目的具体情况合理分层,但我始终不明白service层的具体作用。
归纳下我的疑问:
1使用hibernate的方法我返回本身就是po,为什么大家写程序的时候还写dao呢?我的dao里对po的操作几乎把它细分到了一个方法仅仅一次crud,每个方法一开session一关session,session的缓存不是几乎形同虚设了吗?
2我的web层的action我也分的比较的细,一个action只针对用户的一步操作(多步操作可以用action chain串起来),是否还需要service层?为什么?
3web(细,struts2支持按namespace对action划分)+service(使用hibernate实现业务逻辑,稍复杂业务逻辑可以对不同po crud多次可以利用到session缓存)+po 一般情况的项目是不是这样分层更好一些呢?