我的样本输入为“Mickaël”
当我点击数据库时,通过在hibernate代码片段中添加条件来检索值如下。
pCriteria.add(Restrictions.ilike("lastName", lLastName.toLowerCase() + "%"));
我只用“mickaël”获得结果。
但是根据我的要求,我需要同时取“Mickaël”和“Mickael”
有人可以帮忙吗??? TIA
答案 0 :(得分:1)
您必须在表格或查询(see this post)
上设置例如COLLATE French_CI_AI
的排序规则
答案 1 :(得分:0)
试试这样:
pCriteria.add(Restrictions.ilike("lastName", lLastName.toLowerCase().replaceAll('[ë]', '_')));
我正在尝试创建此字符串Micka_l
。标记'_'代表任何字符,因此如果您的表格中有Micka^l
或Mickaql
,您也会看到此记录。您可以在方括号中添加更多特殊的法语字符,例如[ëöèù]
,以逃避其他特殊字符。
如果你不想让其他角色试试这个:
pCriteria.add(pCriteria.or(
Restrictions.eq("lastName", lLastName.toLowerCase())),
Restrictions.eq("lastName", lLastName.toLowerCase().replaceAll('[ë]', 'e'))
)
);
我假设您输入了整个单词,如果您不将eq更改为ilike并在行的末尾添加百分号,如下所示:
pCriteria.add(pCriteria.or(
Restrictions.ilike("lastName", lLastName.toLowerCase() + "%")),
Restrictions.ilike("lastName", lLastName.toLowerCase().replaceAll('[ë]', 'e') + "%")
)
);
如果还有其他角色需要逃脱,你必须像上面那样解决这些问题。