gpt4 book ai didi

java - Hibernate Criteria Query ...添加新条件

转载 作者:行者123 更新时间:2023-11-29 03:41:49 25 4
gpt4 key购买 nike

我有一个工作正常的标准查询。

Criteria criteria = getSession().createCriteria(getPersistentClass());
criteria.add(Restrictions.eq("employerId",employerId))
.setFetchMode("card", FetchMode.JOIN)
.createCriteria("card")
.addOrder(Order.desc("cardId"))
.createCriteria("salary")
.add(Restrictions.eq("salaryType",SalaryIdentifierType.CONTRACTOR))
.add(Restrictions.eq("active","YES"));

现在,我需要为这个标准添加另一个过滤器(条件)。新过滤器是 joinDate。如果 joinDate 值已从前端传递,我必须将其添加到此查询中,否则不应添加过滤器 joinDate

我已经设法使用析取来做到这一点(我知道,这很奇怪......但是据我所知,只有析取才能在运行时添加过滤器,只有它存在时)。我是这样做的,但我不想在这里使用析取,我正在寻找其他选择。

Criteria criteria = getSession().createCriteria(getPersistentClass());
-------------------------------------------------------------------------
Disjunction disjunctionDate = Restrictions.disjunction();
if(utilDate!=null){
disjunctionDate = (Disjunction) disjunctionDate.add(Restrictions.ge("startDate", utilDate));
}
-----------------------------------------------------------------------
criteria.add(Restrictions.eq("employerId",employerId))
.setFetchMode("card", FetchMode.JOIN)
.createCriteria("card")
.addOrder(Order.desc("cardId"))
.createCriteria("salary")
.add(Restrictions.eq("salaryType",SalaryIdentifierType.CONTRACTOR))
.add(Restrictions.eq("active","YES"))
.add(disjunctionDate);

我试过只使用 if 条件,就像这样,但没有用(为了编译,我不得不从上面修改查询格式,使每一行都有条件,每一行都有分号)。

Criteria criteria = getSession().createCriteria(getPersistentClass());
criteria.add(Restrictions.eq("employerId",employerId));
criteria.setFetchMode("card", FetchMode.JOIN);
criteria.createCriteria("card");
criteria.addOrder(Order.desc("cardId"));
criteria.createCriteria("salary");
criteria.add(Restrictions.eq("salaryType",SalaryIdentifierType.CONTRACTOR));
criteria.add(Restrictions.eq("active","YES"));
if(startDate!=null){
criteria.add(Restrictions.ge("startDate",startDate));
}

关于如何使用比使用析取更好的选项使这项工作有任何想法?

最佳答案

所以你是说这对你不起作用?

Criteria criteria = getSession().createCriteria(getPersistentClass())
.add(Restrictions.eq("employerId",employerId))
.setFetchMode("card", FetchMode.JOIN)
.createCriteria("card")
.addOrder(Order.desc("cardId"))
.createCriteria("salary", "sl") // <- alias for salary
.add(Restrictions.eq("sl.salaryType",SalaryIdentifierType.CONTRACTOR))
.add(Restrictions.eq("sl.active","YES"));

if(startDate!=null) {
criteria.add(Restrictions.ge("sl.startDate",startDate));
}

参见 http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#querycriteria-associations

关于java - Hibernate Criteria Query ...添加新条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12804401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com