我有一个循环,通过DAO执行N次查询。在我的例子中,我有一个对象,其属性值为“123456789”。在第一个回合中,它对特定表执行查询以获取列C1
等于“123456789”的所有记录。
在第二轮中,它在同一个表上执行查询,以获取列C1
等于“12345678”的所有记录。依此类推,直到找到具有最长前缀的记录。
我认为不是多次执行此查询,为什么不执行一次另一个查询,将参数作为字符串“123456789”并返回具有最长前缀列C1
的记录“123456789”。但我不知道如何使用Hibernate(如果可能),或者如果你有另一个解决方案。我正在使用MySQL。
(我看过这个post,但我想知道是否有办法用Hibernate做到这一点。)
答案 0 :(得分:2)
您可以执行如下的SQL:
select * from table where 1234567 like concat(c1,'%') order by c1 desc limit 1;
基本上,您将从SQL返回的最长值与给定参数匹配。如果需要,可以使用setMaxResults代替limit和operator ||列连接,如:
...
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();
...