2017-10-04 80 views
0
public List<Staffing> upcoming(){ 

     List<Staffing> staffing = new ArrayList<Staffing>(); 

     Criteria criteria = getCriteria(); 
     criteria.add(Restrictions.isNotNull("startDate")).add(Restrictions.le("startDate", new Date())); 
     criteria.add(Restrictions.isNotNull("endDate")).add(Restrictions.ge("endDate", new Date())); 
     criteria.add(Restrictions.eq("softDelete", false)); 
     criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("user"))); 
     DetachedCriteria maxDateQuery = DetachedCriteria.forClass(Employee.class); 
     maxDateQuery.add(Restrictions.in("user",criteria.list())); 
     maxDateQuery.setProjection(Projections.max("endDate")); 

     staffing = criteria.list(); 
     return staffing; 
    } 

在這裏,我想獲取人員配置清單,但我得到的對象數組清單不知道什麼是錯的,但我覺得有什麼錯誤的投影。我正在嘗試的是基於最大endDate獲取用戶及其其他描述。投影分組分離標準

我有一個類Staffing.java varibale Employee用戶(Employee是另一個類)... Date endDate .... Date startDate,布爾softDelete ..... String projectName ...我想要獲取工作人員具有最大結束日期的用戶的列表....喜歡的用戶可以擁有具有結束日期。我想獲取其每用戶

最大結束日期列出許多項目,這是我的工作人員類

public class Staffing extends BaseObject { 

    /** The Constant serialVersionUID. */ 
    private static final long serialVersionUID = -3254731507746702368L; 

    /** The id. */ 
    private Long id; 

    /** The start date. */ 
    private Date startDate; 

    /** The end date. */ 
    private Date endDate; 

    /** The user. */ 
    private Employee user; 

    /** The project. */ 
    private Project project; 

    /** 
    * isDelete for soft delete of staffing. 
    */ 
    private boolean softDelete; 


} 

而且這是員工分類

public class Employee extends BaseObject implements Serializable, 
     Comparable<Employee>, IAuditLog { 


    /** 
    * id 
    */ 
    private Long id; 

    /** 
    * username is required field 
    */ 
    private String username; 
    /** 
    * password is required field 
    */ 
    private String password; 

    /** 
    * firstname is required field 
    */ 
    private String firstName; 

    /** 
    * lastname is required field 
    */ 
    private String lastName; 

    /** 
    * personal Email is required field 
    */ 
    private String email; 

    /** 
    * primary phone number 
    */ 
    private String phoneNumber; 

    /** 
    * permanent Address 
    */ 
    private Address permanentAddress; 


    /** 
    * gender is required field 
    */ 
    private char gender; 

    /** 
    * Date of birth is required field 
    */ 
    private Date DOB; 



} 
+0

的解決方案可以更傳神!您想做什麼 ? –

+0

我有一個類Staffing.java varibale Employee用戶(Employee是另一個類)... Date endDate ....日期startDate,布爾softDelete ..... String projectName ...我想獲取人員列表對於用戶具有最大endDate ....喜歡用戶可能有很多項目有endDate ..我想要獲取列表具有最大endDate每個用戶 –

回答

0

我發現這個查詢

List<Staffing> staffing = null; 
     SimpleDateFormat df = new SimpleDateFormat("yyyy MM dd"); 
     String dateString = df.format(duration); 

     Date date = df.parse(dateString); 
     DetachedCriteria maxDate=DetachedCriteria.forClass(Staffing.class); 
     maxDate.add(Restrictions.eq("softDelete", false)); 
     maxDate.setProjection(Projections.projectionList().add(Projections.groupProperty("user").as("user")).add(Projections.max("endDate"),"maxDate")); 
     Criteria criteria = getCriteria(); 

     criteria.add(Restrictions.isNotNull("startDate")).add(Restrictions.le("startDate", new Date())); 
     criteria.add(Restrictions.isNotNull("endDate")).add(Restrictions.ge("endDate", new Date())).add(Restrictions.le("endDate", date)); 
     criteria.add(Restrictions.eq("softDelete", false)); 
     criteria.add(Subqueries.propertiesIn(new String[]{"user","endDate"}, maxDate)); 
     staffing = criteria.list(); 
     return staffing; 
0

因此,您可以使用此方法獲取一名員工的最大endDate

然後,您可以使用循環對Employees列表執行相同操作。

所以有我現在的做法:

public List<Staffing> upcoming(Employee User){ 

     List<Staffing> staffing = new ArrayList<Staffing>(); 

     Criteria criteria = getCriteria(); 
     criteria.add(Restrictions.isNotNull("startDate")) 
     .add(Restrictions.le("startDate", new Date())); 
     criteria.add(Restrictions.isNotNull("endDate")) 
     .add(Restrictions.ge("endDate", new Date())); 
     criteria.add(Restrictions.eq("softDelete", false)); 
     criteria.add(Restrictions.eq("user", User)); 
     criteria.setProjection(Projections.max("endDate")); 
     staffing = criteria.list(); 
     return staffing; 
    } 

然後我們得到了所有員工的名單:

public List<Employee> allEmployees(){ 

      List<Employee> employees= new ArrayList<Employee>(); 

      Criteria criteria = getCriteria(); 
       employees= criteria.list(); 
      Set<Domaine> employeesLLC = new HashSet<>(); 
     employeesLLC .addAll(employees); 
     employees.clear(); 
     employees.addAll(employeesLLC); 
     return employees; 
     } 

而且第一梅索德適用於每個員工的。

+0

給出此錯誤「無法解析屬性:endDate of:com.model.Employee;嵌套異常是org.hibernate.QueryException:無法解析屬性:endDate:com.model.Employee「 –

+0

你可以請你發佈你的兩個班員工和人員配備! –

+0

嗨我已編輯我的帖子,現在它有兩個類 –