我有一个任期:
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也可以。