2011-04-14 62 views
0

我通过setMaxResults知道& Hibernate中Criteria的setFristResults方法我可以做分页..但是我的问题是我如何将它与DAO分开,我的意思是我在那里实现了DAO,只能在那里指定setMaxResults ()& setFristResults()值,我想使它作为单独的层,因为如果假设是周围有500 DAO的各种模块则其难以发生相应的变化,Hibernate寻呼

下面是代码: 域:

public class Demo implements java.io.Serializable { 
private int id; 
private Date date; 
private String weekday; 
private Double cost; 

public Demo() 
{ 

} 

public Demo(Date date, String weekday, Double cost) 
{ 
    this.date = date; 
    this.weekday = weekday; 
    this.cost = cost; 
} 
/***Setter & getter***/ 
} 

DAO:

public interface DemoDAO { 

public void setPage(Page page); 
public List<Demo> findAll(); 
} 


public class DemoDAOImpl implements DemoDAO { 
private HibernateDAO hibernateDAO; 
private Session session; 
private Page page; 

public DemoDAOImpl() 
{ 
    hibernateDAO = new HibernateDAOImpl(); 
    session = hibernateDAO.getSession(); 
} 

public void setPage(Page page) 
{ 
    this.page = page; 
} 

public List<Demo> findAll() 
{ 
    session.beginTransaction(); 
    Criteria criteria = session.createCriteria(Demo.class); 
    criteria.setFirstResult(page.getPageNumber() * page.getPageSize()); 
    criteria.setMaxResults(page.getPageSize()); 

    List<Demo> demoList = criteria.list(); 
    session.getTransaction().commit(); 

    return demoList; 
} 

服务:

public interface DemoService { 

public List<Demo> showDetails(Page page); 
} 



public class DemoServiceImpl implements DemoService { 
private DemoDAO demoDAO; 

public DemoServiceImpl() 
{ 
    demoDAO = new DemoDAOImpl(); 
} 

public List<Demo> showDetails(Page page) 
{ 
    if(page != null) 
     demoDAO.setPage(page); 
    else 
     page = new Page(0,50); 

    return demoDAO.findAll(); 
} 
} 
现在

从前端我打电话此showDetails ...

请,如果我使用的是正确的事情指正......

回答

2

你是从而使你的DAO有状态,这并不好。

您可以改为将Page作为参数传递给每个方法。因此,DAO的单个实例就足够了。

+1

请您详细说明...... :) – Amit 2011-04-14 09:26:02

+0

我的意思是我怎样才能使它成为无状态的.. – Amit 2011-04-14 09:35:49

+0

@Amit - 通过将'Page'对象作为参数传递给方法。 – Bozho 2011-04-14 17:41:22