La réponse courte est non, vous ne pouvez pas le faire, mais vous pouvez implémenter un OrExample
, c'est assez facile, vérifiez seulement le code source du Example
et changez le and
pour or
(voir sourcecode ligne 329). Puisque les méthodes sont protégées, vous pouvez l'étendre et remplacer seulement le nécessaire.
Quelque chose comme ceci:
public class OrExample extends org.hibernate.criterion.Example {
@Override
protected void appendPropertyCondition(
String propertyName,
Object propertyValue,
Criteria criteria,
CriteriaQuery cq,
StringBuffer buf)
throws HibernateException {
Criterion crit;
if (propertyValue!=null) {
boolean isString = propertyValue instanceof String;
if (isLikeEnabled && isString) {
crit = new LikeExpression(
propertyName,
(String) propertyValue,
matchMode,
escapeCharacter,
isIgnoreCaseEnabled
);
}
else {
crit = new SimpleExpression(propertyName, propertyValue, "=", isIgnoreCaseEnabled && isString);
}
}
else {
crit = new NullExpression(propertyName);
}
String critCondition = crit.toSqlString(criteria, cq);
if (buf.length()>1 && critCondition.trim().length()>0) buf.append(" or ");
buf.append(critCondition);
}
Voir la or
au lieu du and
d'origine.
Cela peut vous être utile: http://stackoverflow.com/questions/8126589/hibernate-criteria-restrictions-and-or-combination – TonyGW