Hibernate Paging - PullRequest
       1

Hibernate Paging

0 голосов
/ 14 апреля 2011

Я знаю, что с помощью метода setMaxResults & setFristResults Criteria в Hibernate я могу выполнять разбиение по страницам ... но мой вопрос состоит в том, как отделить его от DAO, я имею в виду, где я реализую DAO только там, я могу указать setMaxResults ()Значение & setFristResults (), я хочу сделать его отдельным слоем, потому что если предположить, что существует около 500 различных модулей DAO, то его трудно изменить соответствующим образом,

Вот код: Домен:

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 ...

пожалуйста, поправьте меня, если яя использую правильную вещь ...

1 Ответ

2 голосов
/ 14 апреля 2011

Таким образом, вы создаете свой DAO с состоянием, а это не так хорошо.

Вместо этого вы можете передать Page в качестве аргумента каждому методу. Таким образом, будет достаточно одного экземпляра DAO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...