2017-10-04 2 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に基づいてユーザとその他の説明を取得することでした。プロジェクション・グループ・戸建基準

varibaleを持つStaffing.javaがあります。Employeeユーザー(Employeeは別のクラス)... date endDate .... Date startDate、Boolean softDelete ..... String projectName ...フェッチしたいユーザーのような最大endDateにを持つユーザのための人員のリストが.... endDateにを持っている多くのプロジェクトを有していてもよく..私はこれが

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; 


} 

私のスタッフのクラスであるユーザー

あたりの最大endDateにしたリストを取得したいとこれは従業員クラス

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

私はvaribaleを持つStaffing.javaを持っていますEmployeeユーザー(Employeeは別のクラスです)... Date endDate .... Date startDate、Boolean softDelete ..... String projectName ...私は人材のリストを取得したいユーザーが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

したがって、このメソッドを使用して、1人の従業員の最大値を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; 
     } 

そして、あなたの従業員のそれぞれに最初Methodeのを適用します。

+0

このエラーは「プロパティを解決できませんでした:endDate of:com.model.Employee;ネストされた例外はorg.hibernate.QueryException:プロパティを解決できませんでした:endDate of:com.model.Employee " –

+0

あなたは2つのクラスを投稿してください。Employee and Staffing! –

+0

こんにちは私の投稿を編集しましたが、今は両方のクラスがあります –