0

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

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

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

(我看过这篇文章,但我想知道是否有办法用 Hibernate 做到这一点。)

4

1 回答 1

2

您可以执行如下 sql:

select * from table where 1234567 like concat(c1,'%') order by c1 desc limit 1;

基本上,您将采用与给定参数匹配的 SQL 返回的最长值。如果您愿意,可以使用 setMaxResults 代替限制和运算符 || 连接列,例如:

...
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();
...
于 2011-10-23T15:14:00.630 回答