仅获取Liferay中的特定数据记录

时间:2013-04-20 09:49:09

标签: java database liferay liferay-6

我正在使用Liferay开发模块。一部分涉及仅从那些雇员的休假状态为待定的数据库中提取那些记录。我必须获取“待处理”记录的代码是:

  @SuppressWarnings("unchecked")
   public static List<Employee> getEmployeeData() throws    PortalException, SystemException{

   List<Employee> employeeDetails;

   try{
    int totalEmployees = EmployeeLocalServiceUtil.getEmployeesCount();
            for(Employee emp: employeeDetails   {
               if(emp.getEmpStatus.equals("Pending")  {
    employeeDetails=  EmployeeLocalServiceUtil.getEmployees(0,totalEmployees);
           }
    }           
                      }catch(SystemException se){
                          employeeDetails = Collections.emptyList();
                     }


                     return employeeDetails;
                }

以上代码提取所有详细信息 - 待处理和未处理。我知道这是因为上面代码中的陈述:

employeeDetails = EmployeeLocalServiceUtil.getEmployees(0,totalEmployees);

因为它获取所有行。那么我应该如何构建和修改我的代码以仅获取待处理的详细信息?

3 个答案:

答案 0 :(得分:2)

当您在Liferay中处理自定义实体时,您可以在service.xml中使用finder标记来处理此类场景。在service.xml中定义empStatus字段的查找器。

<finder name="EmpStatus" return-type="Collection">
  <finder-column name="empStatus"/>
</finder>

这将在 * * Persistence.java中创建finder [findByEmpStatus(String status)]方法,该方法将根据状态返回特定行,现在需要手动将方法添加到*(Local) ServiceImpl.java文件。这些方法将调用您的* persitence.finderMethodName()方法。

HTH,

答案 1 :(得分:1)

快速但非常糟糕的做法是让代码保持这种变化:

List<Employee> employeeDetails = new ArrayList<Employee>;
try{

List<Employees> allEmployees = EmployeeLocalServiceUtil.getAllEmployees();

        for(Employee emp: allEmployees {
           if(emp.getEmpStatus.equals("Pending")  {
employeeDetails.add(emp);
       }
}return employeeDetails;      

现在,正确的方法是:

  1. 添加一个Finder,正如@Pankaj Kathiriya已经提出的那样。然后,构建服务
  2. 转到EmployeeLocalServiceImpl,然后添加

    public List getAllEmployeesByEmpStatus (String status) { 
    try { 
        return employeePersistence.findByEmpStatus(status); 
    } catch (SystemException e) {
        e.printStackTrace(); return Collections.emptyList(); 
        }
    }
    
  3. 然后再次构建服务

    1. 替换您的代码
          List employeeDetails = EmployeeLocalServiceUtil.getAllEmployeesByEmpStatus("Pending") ; 
      return employeeDetails;
      

答案 2 :(得分:0)

我有一个解决方案。我在论坛中得到了一个在liferay中使用Dyanamic Query的建议。

这很简单。

在liferay上阅读关于Dynamic Query的维基。

回答我自己的问题,这是我找到的解决方案:

  DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(LeaveApplication.class);

  dynamicQuery.add(PropertyFactoryUtil.forName("EmpStatus").eq("Pending"));

然后我返回那些状态正在等待的人。

希望它对某人有所帮助..欢迎提出更多建议:)