针对不同字段值长度的Hibernate Criteria

时间:2015-01-30 12:04:44

标签: java hibernate criteria

我有一个实体,其中(字符串)字段大小= 10

@Column(length = 10)
String code;

但是,字段的值长度可以是5或10.我想创建一个根据字段长度匹配该字段值的休眠条件,如:

final List<String> codesLong= new ArrayList<String>();
final List<String> codesShort= new ArrayList<String>();
...
criteria.add(Restrictions.or(
Restrictions.and(Restrictions.in("code", codesShort),
Restrictions.eq("code.length", 5)),
Restrictions.and(Restrictions.in("code", codesLong),
Restrictions.eq("code.length", 10)))
);

然而......以上看起来不错,但显然不会起作用。我不知道如何处理这个问题。 我会很感激任何提示。

感谢

//解决方案(感谢Stanislav!) 实体:

@Column(length = 10)
String code;

@Formula(" length(code) ")
int codelength; // create GETter method as well

标准:

final List<String> codesLong= new ArrayList<String>();
final List<String> codesShort= new ArrayList<String>();
...
criteria.add(Restrictions.or(
Restrictions.and(Restrictions.in("code", codesShort),
Restrictions.eq("codelength", 5)),
Restrictions.and(Restrictions.in("code", codesLong),
Restrictions.eq("codelength", 10)))
);

1 个答案:

答案 0 :(得分:3)

您可以引入人工实体字段codeLength并使用@Formula注释(示例here

并在条件中使用codeLength。