【问题标题】:How to write the Criteria queries dynamically?如何动态编写条件查询?
【发布时间】:2014-03-24 11:51:22
【问题描述】:

您好,我正在编写一个条件查询来获取员工。我使用通用类型作为此方法的参数。用户可以动态地传递他们想要的类。对于我的员工类,我想动态添加一些限制,例如如果员工为真,那么我想获取该记录,否则不应获取该记录。但是如果用户只给出记录而没有任何限制,那么它必须获取所有记录。

public static <T> List getRowCount(Class<T> classname) {

    Session ses = HibernateUtil.getSessionFactory().openSession();
    System.out.println("classname" + classname);
    List<SetPaginationRecords> s1 = new ArrayList<SetPaginationRecords>();
    try {
        Criteria crit1 = ses.createCriteria(classname);
        crit1.setProjection(Projections.rowCount());
        List l1 = crit1.list();
        Iterator it1 = l1.iterator();
        if (it1.hasNext()) {
            Object o = it1.next();
            totalNumberOfRecords = Integer.parseInt(o.toString());
        }
    }
}

这是我的调用方法。

 List<SetPaginationRecords> paginationrecords = PaginationClass.getRowCount(EmployeeEntity.class);
        request.setAttribute("paginationrecords", paginationrecords);

【问题讨论】:

  • 嗨,谁能帮帮我。

标签: java hibernate hibernate-criteria


【解决方案1】:

您可以尝试这样的事情(这只是一个示例,概述它的外观):

Session session = HibernateUtil.getSessionFactory().openSession();
Criteria criteria = session.createCriteria(Employee.class);
if (userChoice.femalesOnly()) {
    criteria.add(Restrictions.eq("gender", Gender.FEMALE));
}
List<Employee> employees = criteria.list();

在这里您首先创建一个没有限制的条件。这意味着将获取所有记录。然后您检查用户数据,并根据给定的信息,扩充标准。最后,调用list() 获取结果。

【讨论】:

  • 我的例子怎么可能传递参数。
  • 您的示例不完整。源代码缺少重要的类型和变量。让它完整,也许我能给你一个正确的答案。至于现在我不得不猜测很多,对不起。
【解决方案2】:

您可以使用 isAssignableFrom 来确定您正在处理的对象。

public static <T> List getRowCount(Class<T> classname) {
   Criteria crit1 = ses.createCriteria(classname);

   if(Employee.class.isAssignableFrom(classname)){
      //Add some restriction to the criteria
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2016-07-09
    • 2020-06-19
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多