Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 我喜欢机械_Hibernate - Fatal编程技术网

Hibernate 我喜欢机械

Hibernate 我喜欢机械,hibernate,Hibernate,如何编写自定义Creteria API以找到唯一的结果, 匹配数据库中最长的序列 如果我有请求字符串“V1234”,它应该与V123匹配 V1234 -> V123 如果我有请求字符串“V12XXX”,它应该与V12匹配 如果我有请求字符串“V”,它应该与V匹配,您可以按长度desc对值进行排序,然后迭代这些值以检查是否匹配,如果匹配,则断开 public static void main(String[] args) { List<String> values =

如何编写自定义Creteria API以找到唯一的结果, 匹配数据库中最长的序列

如果我有请求字符串“V1234”,它应该与V123匹配

V1234 -> V123
如果我有请求字符串“V12XXX”,它应该与V12匹配


如果我有请求字符串“V”,它应该与V匹配,您可以按长度desc对值进行排序,然后迭代这些值以检查是否匹配,如果匹配,则断开

public static void main(String[] args) {
    List<String> values = Arrays.asList("V", "V1", "V12", "V123");
    Collections.sort(values, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o2.compareTo(o1);
        }
    });

    String[] test = new String[]{"V123456", "V127896", "V1877", "V2394"};
    for (String s : test) {
        for (String str : values) {
            if (s.contains(str)) {
                System.out.println(str);
                break;
            }
        }
    }
}
publicstaticvoidmain(字符串[]args){
列表值=数组。asList(“V”、“V1”、“V12”、“V123”);
Collections.sort(值,新的Comparator(){
@凌驾
公共整数比较(字符串o1、字符串o2){
返回o2.compareTo(o1);
}
});
字符串[]测试=新字符串[]{“V123456”、“V127896”、“V1877”、“V2394”};
用于(字符串s:测试){
for(字符串str:values){
如果(s.包含(str)){
系统输出打印项次(str);
打破
}
}
}
}

您可以使自己的标准实现类似于
LikeExpression
,但使用。然后找到最长的,你必须排序。不幸的是,我认为如果不创建自定义的
顺序
实现,就无法按字段长度进行排序

criteria.add(new InverseLikeExpression(value, "yourProperty", MatchMode.START)
    .addOrder(OrderByLength.desc("yourProperty"))
    .setMaxResults(1);
使用HQL,这会更容易一些:

where :value like yourProperty || '%' order by length(yourProperty) desc