我想在Java中做一个多重过滤器,我使用Spring Boot。我的查询是使用条件写的。
SearchApp.java:
@Entity
@Table(name = "searchapp")
public class SearchApp implements Serializable {
@Column(name = "code")
private String code;
@Column(name = "release")
private String release;
@Column(name = "environnement")
private String environnement;
@Column(name = "date")
private Date date;
private static final long serialVersionUID = -1701849052760947052L;
public SearchApp() {
super();
// TODO Auto-generated constructor stub
}
public DeploiementApp(String code,String release,String environnement,Date date) {
super();
this.code = code.toLowerCase();
this.release = release;
this.environnement = environnement;
this.date= date;
}
我有一个搜索控制器,这是进入我的应用程序的大门
SearchController.java:
@Autowired
SearchService searchService;
@GetMapping("/filtersearch")
public List<SearchApp> filter(@RequestParam("code") String code,@RequestParam("release") String release,@RequestParam("environnement") String environnement,@RequestParam("date") String date) {
return searchService.filter(code.toUpperCase(),release.toUpperCase(),environnement.toUpperCase(),date);
}
SearchService.java:
List<SearchApp> filter(String code,String date);
SearchServiceImpl.java:
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager em;
public SearchServiceImpl(EntityManager em) {
super();
this.em = em;
}
@Override
public List<SearchApp> filter(String code,String date) {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
Date dateBD = new Date();
dateBD = format.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
CriteriaBuilder criteriaBuilder = em.getcriteriaBuilder();
//select
CriteriaQuery<SearchApp> criteriaQuery = criteriaBuilder.createQuery(SearchApp.class);
//from
Root<SearchApp> itemRoot = criteriaQuery.from(SearchApp.class);
// attribut
List<Predicate> predicate = new ArrayList<Predicate>();
if( code != "" || code != null) {
Predicate predicateCode = criteriaBuilder.equal(itemRoot.get("code"),code);
predicate.add(predicateCode);
}
if( release != "" || release != null) {
Predicate predicateRelease = criteriaBuilder.equal(itemRoot.get("release"),release);
predicate.add(predicateRelease);
}
if( environnement != "" || environnement != null) {
Predicate predicateEnvironnement = criteriaBuilder.equal(itemRoot.get("environnement"),environnement);
predicate.add(predicateEnvironnement);
}
if( dateBD != null ) {
Predicate predicateDate = criteriaBuilder.equal(itemRoot.get("date"),date);
predicate.add(predicateDate);
}
Predicate And = criteriaBuilder.and(predicate.toArray(new Predicate[predicate.size()]));
//where
criteriaQuery.where(And);
List<SearchApp> result = em.createQuery(criteriaQuery).getResultList();
return result;
}
它不起作用。
错误:org.hibernate.query.criteria.internal.predicate.ComparisonPredicate@41f4f353 org.hibernate.query.criteria.internal.predicate.ComparisonPredicate@77ef22f7 还有日期错误