如何为此案例制作JPQL或Criteria搜索查询

时间:2015-11-21 12:40:04

标签: java mysql java-8 jpql criteria-api

我有一个任期:

public class Tenure {
    private long minimumPeriod;
    private long maximumPeriod;

    private Period getMinimumPeriod(){
       //custom logic which converts period to long and vice versa
    }

    private Period getMaximumPeriod() {
       //custom logic which converts period to long and vice versa
    }
}

Period是java.time.Period,在Java 8中引入,到目前为止还没有在MySQL中支持。这就是为什么我要存储它的原因。

现在,我想搜索一个Tenure,其最大值大于某个句号' p'和minimumPeriod小于' p'。

我可以像这样写一个CriteriaQuery:

CriteriaQuery<Tenure> criteriaQuery = criteriaBuilder.createQuery(Tenure.class);
Root<Tenure> root = criteriaQuery.from(Tenure.class);
Root<Long> minimumPeriod = root.get("minimumPeriod");
Root<Long> maximumPeriod = root.get("maximumPeriod");

Period p = // somevalue;
long pToLong = convertPeriodToLong(p);

现在像这样构建criteriaQuery:

    criteriaQuery.where(criteriaBuilder.greaterThan(maximumPeriod, pToLong),criteriaBuilder.lessThan(minimumPeriod, pToLong));

这很有效。但问题是它取决于我的“终身教职”的基本实施。类。我不想比较Period的长值,而是直接比较&#39; Period&#39;因为这是在应用层有意义的。我有自定义逻辑用于比较&#39;期间&#39;所以没有问题。

有什么办法可以实现吗?我不希望有人知道在存储到数据库之前将Period转换为很久,然后在从数据库中获取Tenure的任何地方将所有Period转换为long。

JPQL Query也可以。

0 个答案:

没有答案