Java SQL最长前缀字符串

Java SQL最长前缀字符串,java,mysql,sql,string,longest-prefix,Java,Mysql,Sql,String,Longest Prefix,我有一个循环,它通过DAO执行查询N次。在我的例子中,我有一个属性值为“123456789”的对象。在第一轮中,它对特定表执行一个查询,以获取列C1等于“123456789”的所有记录 在第二轮中,它对同一个表执行查询,以获取列C1等于“12345678”的所有记录。依此类推,直到找到前缀最长的记录 我想,与其多次执行此查询,不如只执行一次另一个查询,它将字符串“123456789”作为参数,并返回包含列C1的记录,该列是“123456789”的最长前缀。但我不知道如何使用Hibernate(如

我有一个循环,它通过DAO执行查询N次。在我的例子中,我有一个属性值为“123456789”的对象。在第一轮中,它对特定表执行一个查询,以获取列
C1
等于“123456789”的所有记录

在第二轮中,它对同一个表执行查询,以获取列
C1
等于“12345678”的所有记录。依此类推,直到找到前缀最长的记录

我想,与其多次执行此查询,不如只执行一次另一个查询,它将字符串“123456789”作为参数,并返回包含列
C1
的记录,该列是“123456789”的最长前缀。但我不知道如何使用Hibernate(如果可能的话),或者是否有其他解决方案。我正在使用MySQL


(我已经看过了,但我想知道是否有一种方法可以通过Hibernate实现这一点。)

您可以执行如下sql:

select * from table where 1234567 like concat(c1,'%') order by c1 desc limit 1;
基本上,您将获取从SQL返回的与给定参数匹配的最长值。如果需要,可以使用setMaxResults代替limit和运算符| |来连接列,例如:

...
Query query = session.createQuery("from Prefixes where :parameter like Prefixes.prefix || '%' order by Prefixes.prefix desc");
query.setParameter("parameter", 1234567);
query.setMaxResults(1);
Prefixes p = (Prefixes)query.uniqueResult();
...

谢谢你的回答,很有效!但是,我有两个问题:第一,concat()和| |的用法有什么区别?另外,这个HQL语句是否可以在不同的DBMS之间移植?据我所知,| |是hibernate,这意味着将使用各自的函数转换到每个数据库。concat将被传递并用于特定的数据库。