/*
* Copyright 2011-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package kr.debop4j.data.hibernate.tools;
import kr.debop4j.core.tools.ArrayTool;
import kr.debop4j.core.tools.StringTool;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.Criteria;
import org.hibernate.criterion.*;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
import static kr.debop4j.core.Guard.shouldNotBeEmpty;
import static kr.debop4j.core.Guard.shouldNotBeNull;
import static org.hibernate.criterion.Restrictions.*;
/**
* Criteria 관련 Utility Class 입니다.
*
* @author 배성혁 ( sunghyouk.bae@gmail.com )
* @since 12. 9. 21
*/
@Slf4j
public final class CriteriaTool {
private CriteriaTool() { }
// region << Criterion >>
/**
* 특정 속성 값이 lowerValue 와 upperValue 구간에 속하는지 구합니다.
*
* @param propertyName the property name
* @param lo the lo
* @param hi the hi
* @return the is between criterion
*/
public static Criterion getIsBetweenCriterion(String propertyName, Object lo, Object hi) {
return getIsBetweenCriterion(propertyName, lo, hi, true, true);
}
/**
* Gets Between criterion.
*
* @param propertyName the property name
* @param lo the lo
* @param hi the hi
* @param includeLo the include lo
* @param includeHi the include hi
* @return the is between criterion
*/
public static Criterion getIsBetweenCriterion(String propertyName, Object lo, Object hi,
boolean includeLo, boolean includeHi) {
shouldNotBeEmpty(propertyName, "propertyName");
if (lo == null && hi == null)
throw new IllegalArgumentException("상하한 값 모두 null 이면 안됩니다.");
if (lo != null && hi != null && includeLo && includeHi)
return between(propertyName, lo, hi);
// lo, hi 값 중 하나가 없다면
Conjunction result = conjunction();
if (lo != null)
result.add((includeLo) ? ge(propertyName, lo)
: gt(propertyName, lo));
if (hi != null)
result.add((includeHi) ? le(propertyName, hi)
: lt(propertyName, hi));
return result;
}
/**
* 지정한 값이 두 속성 값 사이에 존재하는지 여부
*
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param value the value
* @return the is in range criterion
*/
public static Criterion getIsInRangeCriterion(final String loPropertyName,
final String hiPropertyName,
Object value) {
return getIsInRangeCriterion(loPropertyName,
hiPropertyName,
value,
true,
true);
}
/**
* 지정한 값이 두 속성 값 사이에 존재하는지 여부
*
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param value the value
* @param includeLo the include lo
* @param includeHi the include hi
* @return the is in range criterion
*/
public static Criterion getIsInRangeCriterion(final String loPropertyName,
final String hiPropertyName,
Object value,
boolean includeLo,
boolean includeHi) {
shouldNotBeNull(value, "value");
Criterion loCriteria = (includeLo) ? le(loPropertyName, value)
: lt(loPropertyName, value);
Criterion hiCritiera = (includeHi) ? ge(hiPropertyName, value)
: gt(hiPropertyName, value);
return conjunction()
.add(disjunction()
.add(isNull(loPropertyName))
.add(loCriteria))
.add(disjunction()
.add(isNull(hiPropertyName))
.add(hiCritiera));
}
/**
* 지정한 범위 값이 두 속성 값 구간과 겹치는지를 알아보기 위한 질의어
*
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param lo the lo
* @param hi the hi
* @return the is overlap criterion
*/
public static Criterion getIsOverlapCriterion(final String loPropertyName,
final String hiPropertyName,
Object lo,
Object hi) {
return getIsOverlapCriterion(loPropertyName, hiPropertyName, lo, hi, true, true);
}
/**
* 지정한 범위 값이 두 속성 값 구간과 겹치는지를 알아보기 위한 질의어
*
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param lo the lo
* @param hi the hi
* @param includeLo the include lo
* @param includeHi the include hi
* @return the is overlap criterion
*/
public static Criterion getIsOverlapCriterion(String loPropertyName,
String hiPropertyName,
Object lo,
Object hi,
boolean includeLo,
boolean includeHi) {
if (lo == null && hi == null)
throw new IllegalArgumentException("lo, hi 모두 null 값이면 질의어를 만들 수 없습니다.");
if (log.isDebugEnabled())
log.debug("build getIsOverlapCriterion... " +
"loPropertyName=[{}], hiPropertyName=[{}}] lo=[{}}], hi=[{}], includeLo=[{}}], includeHi=[{}]",
loPropertyName, hiPropertyName, lo, hi, includeLo, includeHi);
if (lo != null && hi != null) {
return Restrictions
.disjunction()
.add(getIsInRangeCriterion(loPropertyName, hiPropertyName, lo, includeLo, includeHi))
.add(getIsInRangeCriterion(loPropertyName, hiPropertyName, hi, includeLo, includeHi))
.add(getIsBetweenCriterion(loPropertyName, lo, hi, includeLo, includeHi))
.add(getIsBetweenCriterion(hiPropertyName, lo, hi, includeLo, includeHi));
}
if (lo != null) {
return Restrictions
.disjunction()
.add(getIsInRangeCriterion(loPropertyName, hiPropertyName, lo, includeLo, includeHi))
.add((includeLo) ? ge(loPropertyName, lo)
: gt(loPropertyName, lo))
.add((includeLo) ? ge(hiPropertyName, lo)
: gt(hiPropertyName, lo));
} else {
return Restrictions
.disjunction()
.add(getIsInRangeCriterion(loPropertyName, hiPropertyName, hi, includeLo, includeHi))
.add((includeHi) ? le(loPropertyName, hi)
: lt(loPropertyName, hi))
.add((includeHi) ? le(hiPropertyName, hi)
: lt(hiPropertyName, hi));
}
}
/**
* value가 null 이 아니면, 속성값과 eq 이거나 null 인 경우 모두 구한다. value가 null 인 경우는 isNull 로 만든다.
*
* @param propertyName the property name
* @param value the value
* @return the eq include null
*/
public static Criterion getEqIncludeNull(final String propertyName, Object value) {
if (value != null)
return disjunction()
.add(eq(propertyName, value))
.add(isNull(propertyName));
return isNull(propertyName);
}
/**
* value 가 null 이면 isnull 을 null 이 아니면 eq 질의를 수행합니다.
*
* @param propertyName the property name
* @param value the value
* @return the eq or null
*/
public static Criterion getEqOrNull(final String propertyName, Object value) {
return (value == null)
? isNull(propertyName)
: eq(propertyName, value);
}
/**
* Gets insensitive like include null.
*
* @param propertyName the property name
* @param value the value
* @return the insensitive like include null
*/
public static Criterion getInsensitiveLikeIncludeNull(final String propertyName, String value) {
return getInsensitiveLikeIncludeNull(propertyName, value, MatchMode.START);
}
/**
* Gets insensitive like include null.
*
* @param propertyName the property name
* @param value the value
* @param matchMode the match mode
* @return the insensitive like include null
*/
public static Criterion getInsensitiveLikeIncludeNull(String propertyName, String value, MatchMode matchMode) {
if (StringTool.isWhiteSpace(value))
return isEmpty(propertyName);
return disjunction()
.add(ilike(propertyName, value, matchMode))
.add(isEmpty(propertyName));
}
// endregion
// region << Criteria >>
/**
* Add eq.
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @return the criteria
*/
public static Criteria addEq(Criteria criteria, String propertyName, Object value) {
return criteria.add(getEqOrNull(propertyName, value));
}
/**
* Add not eq.
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @return the criteria
*/
public static Criteria addNotEq(Criteria criteria, String propertyName, Object value) {
return criteria.add(not(getEqOrNull(propertyName, value)));
}
/**
* Add le.
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @return the criteria
*/
public static Criteria addLe(Criteria criteria, String propertyName, Object value) {
shouldNotBeNull(value, "value");
return criteria.add(le(propertyName, value));
}
/**
* Add le property.
*
* @param criteria the criteria
* @param propertyName the property name
* @param otherPropertyName the other property name
* @return the criteria
*/
public static Criteria addLeProperty(Criteria criteria, String propertyName, String otherPropertyName) {
return criteria.add(leProperty(propertyName, otherPropertyName));
}
/**
* Add lt.
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @return the criteria
*/
public static Criteria addLt(Criteria criteria, String propertyName, Object value) {
shouldNotBeNull(value, "value");
return criteria.add(lt(propertyName, value));
}
/**
* Add lt property.
*
* @param criteria the criteria
* @param propertyName the property name
* @param otherPropertyName the other property name
* @return the criteria
*/
public static Criteria addLtProperty(Criteria criteria, String propertyName, String otherPropertyName) {
return criteria.add(ltProperty(propertyName, otherPropertyName));
}
/**
* Add ge.
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @return the criteria
*/
public static Criteria addGe(Criteria criteria, String propertyName, Object value) {
shouldNotBeNull(value, "value");
return criteria.add(ge(propertyName, value));
}
/**
* Add ge property.
*
* @param criteria the criteria
* @param propertyName the property name
* @param otherPropertyName the other property name
* @return the criteria
*/
public static Criteria addGeProperty(Criteria criteria, String propertyName, String otherPropertyName) {
return criteria.add(geProperty(propertyName, otherPropertyName));
}
/**
* Add gt.
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @return the criteria
*/
public static Criteria addGt(Criteria criteria, String propertyName, Object value) {
shouldNotBeNull(value, "value");
return criteria.add(gt(propertyName, value));
}
/**
* Add gt property.
*
* @param criteria the criteria
* @param propertyName the property name
* @param otherPropertyName the other property name
* @return the criteria
*/
public static Criteria addGtProperty(Criteria criteria, String propertyName, String otherPropertyName) {
return criteria.add(gtProperty(propertyName, otherPropertyName));
}
/**
* Add all eq.
*
* @param criteria the criteria
* @param propertyNameValues the property name values
* @return the criteria
*/
public static Criteria addAllEq(Criteria criteria,
Map<String, Object> propertyNameValues) {
shouldNotBeNull(propertyNameValues, "propertyNameValues");
return criteria.add(allEq(propertyNameValues));
}
/**
* Add is empty.
*
* @param criteria the criteria
* @param propertyName the property name
* @return the criteria
*/
public static Criteria addIsEmpty(Criteria criteria, String propertyName) {
return criteria.add(isEmpty(propertyName));
}
/**
* Add is not empty.
*
* @param criteria the criteria
* @param propertyName the property name
* @return the criteria
*/
public static Criteria addIsNotEmpty(Criteria criteria, String propertyName) {
return criteria.add(isNotEmpty(propertyName));
}
/**
* Add is null.
*
* @param criteria the criteria
* @param propertyName the property name
* @return the criteria
*/
public static Criteria addIsNull(Criteria criteria, String propertyName) {
return criteria.add(isEmpty(propertyName));
}
/**
* Add is not null.
*
* @param criteria the criteria
* @param propertyName the property name
* @return the criteria
*/
public static Criteria addIsNotNull(Criteria criteria, String propertyName) {
return criteria.add(isNotEmpty(propertyName));
}
/**
* Add like.
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @return the criteria
*/
public static Criteria addLike(Criteria criteria, String propertyName, String value) {
return addLike(criteria, propertyName, value, MatchMode.START);
}
/**
* Add like.
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @param matchMode the match mode
* @return the criteria
*/
public static Criteria addLike(Criteria criteria, String propertyName, String value, MatchMode matchMode) {
return criteria.add(like(propertyName, value, matchMode));
}
/**
* Insensitive Like search
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @return the criteria
*/
public static Criteria addILike(Criteria criteria, String propertyName, String value) {
return addILike(criteria, propertyName, value, MatchMode.START);
}
/**
* Insensitive Like search
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @param matchMode the match mode
* @return the criteria
*/
public static Criteria addILike(Criteria criteria, String propertyName, String value, MatchMode matchMode) {
return criteria.add(ilike(propertyName, value, matchMode));
}
/**
* Add id eq.
*
* @param criteria the criteria
* @param idValue the id value
* @return the criteria
*/
public static Criteria addIdEq(Criteria criteria, Serializable idValue) {
shouldNotBeNull(idValue, "idValue");
return criteria.add(idEq(idValue));
}
/**
* Add in.
*
* @param criteria the criteria
* @param propertyName the property name
* @param values the values
* @return the criteria
*/
public static Criteria addIn(Criteria criteria, String propertyName, Collection values) {
shouldNotBeNull(values, "values");
return criteria.add(in(propertyName, values));
}
/**
* Add in.
*
* @param criteria the criteria
* @param propertyName the property name
* @param values the values
* @return the criteria
*/
public static <T> Criteria addIn(Criteria criteria, String propertyName, T[] values) {
assert !ArrayTool.isEmpty(values);
return criteria.add(in(propertyName, values));
}
/**
* Add between.
*
* @param criteria the criteria
* @param propertyName the property name
* @param lo the lo
* @param hi the hi
* @return the criteria
*/
public static Criteria addBetween(Criteria criteria, String propertyName, Object lo, Object hi) {
return addBetween(criteria, propertyName, lo, hi, true, true);
}
/**
* Add between.
*
* @param criteria the criteria
* @param propertyName the property name
* @param lo the lo
* @param hi the hi
* @param includeLo the include lo
* @param includeHi the include hi
* @return the criteria
*/
public static Criteria addBetween(Criteria criteria,
final String propertyName,
final Object lo,
final Object hi,
final boolean includeLo,
final boolean includeHi) {
return criteria.add(getIsBetweenCriterion(propertyName, lo, hi, includeLo, includeHi));
}
/**
* Add in range.
*
* @param criteria the criteria
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param value the value
* @return the criteria
*/
public static Criteria addInRange(Criteria criteria,
final String loPropertyName,
final String hiPropertyName,
final Object value) {
return criteria.add(getIsInRangeCriterion(loPropertyName, hiPropertyName, value));
}
/**
* Add in range.
*
* @param criteria the criteria
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param value the value
* @param includeLo the include lo
* @param includeHi the include hi
* @return the criteria
*/
public static Criteria addInRange(Criteria criteria,
final String loPropertyName,
final String hiPropertyName,
final Object value,
final boolean includeLo,
final boolean includeHi) {
return criteria.add(getIsInRangeCriterion(loPropertyName,
hiPropertyName,
value,
includeLo,
includeHi));
}
/**
* Add is overlap.
*
* @param criteria the criteria
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param lo the lo
* @param hi the hi
* @return the criteria
*/
public static Criteria addIsOverlap(Criteria criteria,
final String loPropertyName,
final String hiPropertyName,
final Object lo,
final Object hi) {
return criteria.add(getIsOverlapCriterion(loPropertyName, hiPropertyName, lo, hi));
}
/**
* Add is overlap.
*
* @param criteria the criteria
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param lo the lo
* @param hi the hi
* @param includeLo the include lo
* @param includeHi the include hi
* @return the criteria
*/
public static Criteria addIsOverlap(Criteria criteria,
final String loPropertyName,
final String hiPropertyName,
final Object lo,
final Object hi,
final boolean includeLo,
final boolean includeHi) {
return criteria.add(getIsOverlapCriterion(loPropertyName,
hiPropertyName,
lo,
hi,
includeLo,
includeHi));
}
/**
* Add is elapsed.
*
* @param criteria the criteria
* @param propertyName the property name
* @param date the date
* @return the criteria
*/
public static Criteria addIsElapsed(Criteria criteria, String propertyName, Date date) {
return criteria.add(lt(propertyName, date));
}
/**
* Add null as false.
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @return the criteria
*/
public static Criteria addNullAsFalse(Criteria criteria, String propertyName, Boolean value) {
if (value == null || value)
return addEq(criteria, propertyName, true);
return criteria.add(getEqIncludeNull(propertyName, false));
}
/**
* Add null as true.
*
* @param criteria the criteria
* @param propertyName the property name
* @param value the value
* @return the criteria
*/
public static Criteria addNullAsTrue(Criteria criteria, String propertyName, Boolean value) {
if (value == null || !value)
return addEq(criteria, propertyName, false);
return criteria.add(getEqIncludeNull(propertyName, true));
}
/**
* Add not.
*
* @param criteria the criteria
* @param expression the expression
* @return the criteria
*/
public static Criteria addNot(Criteria criteria, Criterion expression) {
return criteria.add(Restrictions.not(expression));
}
// endregion
// region << DetachedCriteria >>
/**
* Add eq.
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addEq(DetachedCriteria dc, String propertyName, Object value) {
return dc.add(getEqOrNull(propertyName, value));
}
/**
* Add not eq.
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addNotEq(DetachedCriteria dc, String propertyName, Object value) {
return dc.add(not(getEqOrNull(propertyName, value)));
}
/**
* Add le.
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addLe(DetachedCriteria dc, String propertyName, Object value) {
shouldNotBeNull(value, "value");
return dc.add(le(propertyName, value));
}
/**
* Add le property.
*
* @param dc the dc
* @param propertyName the property name
* @param otherPropertyName the other property name
* @return the detached criteria
*/
public static DetachedCriteria addLeProperty(DetachedCriteria dc, String propertyName, String otherPropertyName) {
return dc.add(leProperty(propertyName, otherPropertyName));
}
/**
* Add lt.
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addLt(DetachedCriteria dc, String propertyName, Object value) {
shouldNotBeNull(value, "value");
return dc.add(lt(propertyName, value));
}
/**
* Add lt property.
*
* @param dc the dc
* @param propertyName the property name
* @param otherPropertyName the other property name
* @return the detached criteria
*/
public static DetachedCriteria addLtProperty(DetachedCriteria dc, String propertyName, String otherPropertyName) {
return dc.add(ltProperty(propertyName, otherPropertyName));
}
/**
* Add ge.
*
* @param dc the dc
* @param proprtyName the proprty name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addGe(DetachedCriteria dc, String proprtyName, Object value) {
shouldNotBeNull(value, "value");
return dc.add(ge(proprtyName, value));
}
/**
* Add ge property.
*
* @param dc the dc
* @param proprtyName the proprty name
* @param otherPropertyName the other property name
* @return the detached criteria
*/
public static DetachedCriteria addGeProperty(DetachedCriteria dc, String proprtyName, String otherPropertyName) {
return dc.add(geProperty(proprtyName, otherPropertyName));
}
/**
* Add gt.
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addGt(DetachedCriteria dc, String propertyName, Object value) {
shouldNotBeNull(value, "value");
return dc.add(gt(propertyName, value));
}
/**
* Add gt property.
*
* @param dc the dc
* @param propertyName the property name
* @param otherPropertyName the other property name
* @return the detached criteria
*/
public static DetachedCriteria addGtProperty(DetachedCriteria dc,
String propertyName,
String otherPropertyName) {
return dc.add(gtProperty(propertyName, otherPropertyName));
}
/**
* Add all eq.
*
* @param dc the dc
* @param propertyNameValues the property name values
* @return the detached criteria
*/
public static DetachedCriteria addAllEq(DetachedCriteria dc,
Map<String, Object> propertyNameValues) {
shouldNotBeNull(propertyNameValues, "propertyNameValues");
return dc.add(allEq(propertyNameValues));
}
/**
* Add is empty.
*
* @param dc the dc
* @param propertyName the property name
* @return the detached criteria
*/
public static DetachedCriteria addIsEmpty(DetachedCriteria dc, String propertyName) {
return dc.add(isEmpty(propertyName));
}
/**
* Add is not empty.
*
* @param dc the dc
* @param propertyName the property name
* @return the detached criteria
*/
public static DetachedCriteria addIsNotEmpty(DetachedCriteria dc, String propertyName) {
return dc.add(Restrictions.isNotEmpty(propertyName));
}
/**
* Add is null.
*
* @param dc the dc
* @param propertyName the property name
* @return the detached criteria
*/
public static DetachedCriteria addIsNull(DetachedCriteria dc, String propertyName) {
return dc.add(isEmpty(propertyName));
}
/**
* Add is not null.
*
* @param dc the dc
* @param propertyName the property name
* @return the detached criteria
*/
public static DetachedCriteria addIsNotNull(DetachedCriteria dc, String propertyName) {
return dc.add(Restrictions.isNotEmpty(propertyName));
}
/**
* Add like.
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addLike(DetachedCriteria dc, String propertyName, String value) {
return addLike(dc, propertyName, value, MatchMode.START);
}
/**
* Add like.
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @param matchMode the match mode
* @return the detached criteria
*/
public static DetachedCriteria addLike(DetachedCriteria dc, String propertyName, String value, MatchMode matchMode) {
return dc.add(Restrictions.like(propertyName, value, matchMode));
}
/**
* Insensitive Like search
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addILike(DetachedCriteria dc, String propertyName, String value) {
return addILike(dc, propertyName, value, MatchMode.START);
}
/**
* Insensitive Like search
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @param matchMode the match mode
* @return the detached criteria
*/
public static DetachedCriteria addILike(DetachedCriteria dc, String propertyName, String value, MatchMode matchMode) {
return dc.add(Restrictions.ilike(propertyName, value, matchMode));
}
/**
* Add id eq.
*
* @param dc the dc
* @param idValue the id value
* @return the detached criteria
*/
public static DetachedCriteria addIdEq(DetachedCriteria dc, Serializable idValue) {
return dc.add(Restrictions.idEq(idValue));
}
/**
* Add in.
*
* @param dc the dc
* @param propertyName the property name
* @param values the values
* @return the detached criteria
*/
public static DetachedCriteria addIn(DetachedCriteria dc, String propertyName, Collection values) {
return dc.add(Restrictions.in(propertyName, values));
}
/**
* Add in.
*
* @param dc the dc
* @param propertyName the property name
* @param values the values
* @return the detached criteria
*/
public static <T> DetachedCriteria addIn(DetachedCriteria dc, String propertyName, T[] values) {
return dc.add(Restrictions.in(propertyName, values));
}
/**
* Add between.
*
* @param dc the dc
* @param propertyName the property name
* @param lo the lo
* @param hi the hi
* @return the detached criteria
*/
public static DetachedCriteria addBetween(DetachedCriteria dc, String propertyName, Object lo, Object hi) {
return addBetween(dc, propertyName, lo, hi, true, true);
}
/**
* Add between.
*
* @param dc the dc
* @param propertyName the property name
* @param lo the lo
* @param hi the hi
* @param includeLo the include lo
* @param includeHi the include hi
* @return the detached criteria
*/
public static DetachedCriteria addBetween(DetachedCriteria dc,
final String propertyName,
final Object lo,
final Object hi,
final boolean includeLo,
final boolean includeHi) {
return dc.add(getIsBetweenCriterion(propertyName, lo, hi, includeLo, includeHi));
}
/**
* Add in range.
*
* @param dc the dc
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addInRange(DetachedCriteria dc,
final String loPropertyName,
final String hiPropertyName,
final Object value) {
return dc.add(getIsInRangeCriterion(loPropertyName,
hiPropertyName,
value));
}
/**
* Add in range.
*
* @param dc the dc
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param value the value
* @param includeLo the include lo
* @param includeHi the include hi
* @return the detached criteria
*/
public static DetachedCriteria addInRange(DetachedCriteria dc,
final String loPropertyName,
final String hiPropertyName,
final Object value,
final boolean includeLo,
final boolean includeHi) {
return dc.add(getIsInRangeCriterion(loPropertyName,
hiPropertyName,
value,
includeLo,
includeHi));
}
/**
* Add is overlap.
*
* @param dc the dc
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param lo the lo
* @param hi the hi
* @return the detached criteria
*/
public static DetachedCriteria addIsOverlap(DetachedCriteria dc,
final String loPropertyName,
final String hiPropertyName,
final Object lo,
final Object hi) {
return dc.add(getIsOverlapCriterion(loPropertyName, hiPropertyName, lo, hi));
}
/**
* Add is overlap.
*
* @param dc the dc
* @param loPropertyName the lo property name
* @param hiPropertyName the hi property name
* @param lo the lo
* @param hi the hi
* @param includeLo the include lo
* @param includeHi the include hi
* @return the detached criteria
*/
public static DetachedCriteria addIsOverlap(DetachedCriteria dc,
final String loPropertyName,
final String hiPropertyName,
final Object lo,
final Object hi,
final boolean includeLo,
final boolean includeHi) {
return dc.add(getIsOverlapCriterion(loPropertyName,
hiPropertyName,
lo,
hi,
includeLo,
includeHi));
}
/**
* Add is elapsed.
*
* @param dc the dc
* @param propertyName the property name
* @param date the date
* @return the detached criteria
*/
public static DetachedCriteria addIsElapsed(DetachedCriteria dc, String propertyName, Date date) {
return dc.add(lt(propertyName, date));
}
/**
* Add null as false.
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addNullAsFalse(DetachedCriteria dc, String propertyName, Boolean value) {
if (value == null || value)
return addEq(dc, propertyName, true);
return dc.add(getEqIncludeNull(propertyName, false));
}
/**
* Add null as true.
*
* @param dc the dc
* @param propertyName the property name
* @param value the value
* @return the detached criteria
*/
public static DetachedCriteria addNullAsTrue(DetachedCriteria dc, String propertyName, Boolean value) {
if (value == null || !value)
return addEq(dc, propertyName, false);
return dc.add(getEqIncludeNull(propertyName, true));
}
/**
* Add not.
*
* @param dc the dc
* @param expression the expression
* @return the detached criteria
*/
public static DetachedCriteria addNot(DetachedCriteria dc, Criterion expression) {
return dc.add(Restrictions.not(expression));
}
// endregion
}