2016-07-01 13 views
0

Ich habe 8 verschiedene Feldfilter in meine Anwendung verwendet, die aus acht verschiedenen Dropdown-Menüs ausgewählt sind, jetzt möchte ich die Daten entsprechend der Dropdown-Werte ausgewählt.Wenn ich einen Wert aus der ausgewählt haben DropDown dann wird es die Daten nach ausgewählten Wert holen, und der Rest der Felder sind leer, wenn ich ein anderes Feld auswähle, dann wird es die beiden Feldwerte überprüfen, Rest der Felder sind leer und es wird das Ergebnis aus der Datenbank holen .to tun, so habe ich eine einzelne Abfrage, die Daten abzurufen, dieFiltern Sie die Datensätze durch Hibernate-Kriterien

ist
public List<Companies> getFilteredData(int start, 
           int length, 
           String companyName, 
           String state, 
           Integer empId, 
           String country, 
           String website, 
           Integer pTech, 
           Integer sTech, 
           Integer status){ 


Criteria cr=factory.getCurrentSession().createCriteria(Companies.class); 
cr.createAlias("primTech","primTech"); 
cr.createAlias("secondTech","secondTech"); 
cr.createAlias("statuss","statuss"); 
cr.createAlias("employee","employee"); 

cr.add(Restrictions.and(

      Restrictions.or( 
      Restrictions.eq("companyName",companyName), 
      Restrictions.isNotNull("companyName")) 
    , 
    Restrictions.or(
      Restrictions.eq("state",state), 
      Restrictions.isNotNull("state")), 

     Restrictions.or(
       Restrictions.eq("employee.id",empId), 
       Restrictions.isNotNull("employee.id")), 

     Restrictions.or(
       Restrictions.eq("country",country), 
       Restrictions.isNotNull("country")) 
     , 
     Restrictions.or(
       Restrictions.eq("website",website), 
       Restrictions.isNotNull("website")) 
     , 
     Restrictions.or( 
       Restrictions.eq("primTech.id",pTech) 
       ,Restrictions.isNotNull("primTech.id")) 
    , 
    Restrictions.or(
      Restrictions.eq("secondTech.id",sTech), 
      Restrictions.isNotNull("secondTech.id")) 
     , 
     Restrictions.or(Restrictions.eq("statuss.id",status), 
       Restrictions.isNotNull("statuss.id")) 

     )); 


return cr.list(); 

} 

diese Liste die leeren Werte in allen diesen Fällen gibt, wie ich oben erwähnt. so bald wie möglich hier sind Sie meine POJO Klasse,

@Entity 
@Table 
public class Companies implements Serializable { 

@Id 
@GeneratedValue 
private int id; 
private String companyName; 
private String website; 
private String contactName; 
private String jobTitle; 
private String address; 
private String city; 
private String pin; 
private String country; 
private String empSize; 
private String state; 
private String businessDomain; 
private double rating; 

@ManyToOne 
@JoinColumn(name = "primTechID") 
private PrimaryTech primTech; 

@ManyToOne 
@JoinColumn(name = "secondTechID") 
private SecondaryTech secondTech; 

@ManyToOne 
@JoinColumn(name = "statusID") 
private Status statuss; 

private String phoneNo; 
private String mobileNo; 
private String email; 
private Date datee; 
private String description; 
private String skyp; 

@ManyToOne 
@JoinColumn(name = "employee_id") 
private Employee employee; 

@OneToMany(mappedBy="companies",fetch=FetchType.LAZY) 
@LazyCollection(LazyCollectionOption.FALSE) 
private List<ContactedBy> contactedBy = new ArrayList<ContactedBy>(); 

hier ist mein Controller Seite,

@RequestMapping("admin/getdynamic") 
public @ResponseBody 
String dataProcessing(@RequestParam int draw, 
         @RequestParam int start, 
         @RequestParam int length, 
         @RequestParam(required=false) Integer tech, 
         @RequestParam(required=false)Integer sec, 
         @RequestParam(required=false)Integer emp, 
         @RequestParam String cont, 
         @RequestParam String state, 
         @RequestParam(required=false)Integer status, 
         @RequestParam String url, 
         @RequestParam String compName, 
         Model model){ 



    JsonNodeFactory factory = JsonNodeFactory.instance; 
    ObjectNode objectNode = factory.objectNode(); 


List<Companies> list = companyService.getFilteredData(start,length,compName, state, emp, cont, url, tech, sec, status); 
    ArrayNode node = factory.arrayNode(); 
    objectNode.set("data", node); 

     list.forEach(lists -> { 

      ArrayNode arr = factory.arrayNode();  
      arr.add(lists.getId()); 
      arr.add(lists.getCompanyName()); 
      arr.add(lists.getEmail()); 
      arr.add(lists.getContactName()); 
      arr.add(lists.getWebsite()); 
      arr.add(lists.getPrimTech().getName()); 
      arr.add(lists.getJobTitle()); 
      arr.add(lists.getPhoneNo()); 
      arr.add("<td><input type='checkbox' name='chkbox' id='chekbox' class='chekbox'/></td>"); 
      arr.add("<td width='40'><a class='creativeButton squareBlueButton editButton ct_edit_group' onClick='onUpdateClick("+lists.getId()+")'></a><a class='creativeButton squareRedButton closeButton'onClick='onDeleteClick("+lists.getId()+")'></a></td>"); 

      node.add(arr); 
     }); 



    objectNode.put("draw", draw); 
    objectNode.put("recordsTotal", companyService.getFilteredData(start,length,compName, state, emp, cont, url, tech, sec, status).size()); 
    objectNode.put("recordsFiltered", companyService.companyService.getFilteredData(start,length,compName, state, emp, cont, url, tech, sec, status).size()); 

    return objectNode.toString(); 
} 

für Ihre Antwort Warten .. Dank ..

hier die Abfrage gefeuert durch Hibernate, beachten Sie die Abfrage vom Ende ..

/* criteria query */ select this_.id as id1_0_7_, this_.Status_Count as Status_C2_0_7_, this_.address as address3_0_7_, this_.businessDomain as business4_0_7_, this_.city as city5_0_7_, this_.companyName as companyN6_0_7_, this_.contactName as contactN7_0_7_, this_.country as country8_0_7_, this_.datee as datee9_0_7_, this_.description as descrip10_0_7_, this_.email as email11_0_7_, this_.empSize as empSize12_0_7_, this_.employee_id as employe21_0_7_, this_.jobTitle as jobTitl13_0_7_, this_.mobileNo as mobileN14_0_7_, this_.phoneNo as phoneNo15_0_7_, this_.pin as pin16_0_7_, this_.primTechID as primTec22_0_7_, this_.rating as rating17_0_7_, this_.secondTechID as secondT23_0_7_, this_.skyp as skyp18_0_7_, this_.state as state19_0_7_, this_.statusID as statusI24_0_7_, this_.website as website20_0_7_, employee4_.id as id1_2_0_, employee4_.Report_to as Report_t7_2_0_, employee4_.email as email2_2_0_, employee4_.firstName as firstNam3_2_0_, employee4_.lastName as lastName4_2_0_, employee4_.password as password5_2_0_, employee4_.roleID as roleID8_2_0_, employee4_.username as username6_2_0_, employee7_.id as id1_2_1_, employee7_.Report_to as Report_t7_2_1_, employee7_.email as email2_2_1_, employee7_.firstName as firstNam3_2_1_, employee7_.lastName as lastName4_2_1_, employee7_.password as password5_2_1_, employee7_.roleID as roleID8_2_1_, employee7_.username as username6_2_1_, employeero8_.id as id1_3_2_, employeero8_.name as name2_3_2_, primtech1_.id as id1_4_3_, primtech1_.name as name2_4_3_, secondtech2_.id as id1_7_4_, secondtech2_.name as name2_7_4_, statuss3_.id as id1_8_5_, statuss3_.name as name2_8_5_, statuss3_.categoryId as category3_8_5_, statuscate12_.id as id1_9_6_, statuscate12_.categoryName as category2_9_6_ from Companies this_ inner join Employee employee4_ on this_.employee_id=employee4_.id left outer join Employee employee7_ on employee4_.Report_to=employee7_.id left outer join EmployeeRole employeero8_ on employee4_.roleID=employeero8_.id inner join PrimaryTech primtech1_ on this_.primTechID=primtech1_.id inner join SecondaryTech secondtech2_ on this_.secondTechID=secondtech2_.id inner join Status statuss3_ on this_.statusID=statuss3_.id left outer join StatusCategory statuscate12_ on statuss3_.categoryId=statuscate12_.id where ((this_.companyName is not null and this_.companyName=? and (this_.state is not null) and this_.state=? and (employee4_.id is not null) and employee4_.id=? and (this_.country is not null) and this_.country=? and (this_.website is not null) and this_.website=? and (primtech1_.id is not null) and primtech1_.id=? and (secondtech2_.id is not null) and secondtech2_.id=? and (statuss3_.id is not null) and statuss3_.id=?)) 
+0

Haben Sie die generierte Abfrage in Ihren Protokollen gesehen? Keen auf das zu sehen, dass – aksappy

+0

Sie eine Menge Joins durchführen .. Das ist nicht eine gute Sache zu tun – Zulfi

+0

Warum viele Joins nicht gut sind? – Pranav

Antwort

0
 public List<Companies> getFilteredData(int start, 
      int length, 
      String companyName, 
      String state, 
      Integer empId, 
      String country, 
      String website, 
      Integer pTech, 
      Integer sTech, 
      Integer status){ 



     List<Criterion> criterionList=new ArrayList<Criterion>(); 

     if(null!=companyName && !companyName.isEmpty()) 
      criterionList.add(Restrictions.like("companyName",companyName)); 
    if(null!=state && !state.isEmpty()) 
     criterionList.add(Restrictions.like("state",state)); 
    if(null!=empId) 
     criterionList.add(Restrictions.eq("employee.id",empId)); 
    if(null!=country && !country.isEmpty()) 
     criterionList.add(Restrictions.like("country",country)); 
    if(null!=website && !website.isEmpty()) 
     criterionList.add(Restrictions.like("website",website)); 
    if(null!=pTech) 
     criterionList.add(Restrictions.eq("primTech.id",pTech)); 
    if(null!=sTech) 
     criterionList.add(Restrictions.eq("secondTech.id",sTech)); 
    if(null!=status) 
     criterionList.add(Restrictions.or(Restrictions.eq("statuss.id",status)); 

     Criteria cr=factory.getCurrentSession().createCriteria(Companies.class); 
     cr.createAlias("primTech","primTech"); 
     cr.createAlias("secondTech","secondTech"); 
     cr.createAlias("statuss","statuss"); 
     cr.createAlias("employee","employee"); 

     if(null!=criterionList && !criterionList.isEmpty()) 
      for(Criterion criterion:criterionList) 
       if(null!=criterion) 
        cr.add(criterion); 


     return cr.list(); 

    } 

Dies sollte Ihr Problem lösen.

Die obige Methode fügt ein Kriterium für ein Argument hinzu, wenn es in einer Kriterieliste nicht null ist. Am Ende fügt es der Criteria-Abfrage alle in der Liste vorhandenen Kriterien hinzu. Auf diese Weise wird eine Einschränkung nur für diejenigen Argumente hinzugefügt, deren Wert an diese Methode übergeben wurde.

Hoffe, das hilft

+0

Danke Zulfi, ich habe diesen Code in meinem System ausgeführt, aber ich bekomme immer noch eine Nullliste. – Pranav

+0

@Pranav ändern Sie die eq Einschränkung für Zeichenfolge in ähnliche Einschränkungen .. check bearbeiten auf meiner Antwort oben – Zulfi

+0

Vielen Dank @Zulfi jetzt seine Arbeit ... – Pranav

Verwandte Themen