SQL самый длинный префикс String - PullRequest
0 голосов
/ 23 октября 2011

У меня есть цикл, который выполняет запрос N раз через DAO.В моем случае у меня есть объект со свойством, которое имеет значение «123456789».В первую очередь он выполняет запрос к определенной таблице, чтобы получить все записи, у которых столбец C1 равен «123456789».

Во второй очереди он выполняет запрос к этой же таблице, чтобы получить все записи, у которых столбец C1 равен «12345678».И так до тех пор, пока он не найдет запись с самым длинным префиксом.

Я думал, что вместо выполнения этого запроса несколько раз, почему бы не выполнить другой запрос только один раз, который принимает в качестве параметра строку «123456789» и возвращаетзапись со столбцом C1, который является самым длинным префиксом «123456789».Но я не знаю, как это сделать с Hibernate (если это возможно), или если у вас есть другое решение.Я использую MySQL.

(я просматривал эту запись , но я хотел узнать, есть ли способ сделать это с помощью Hibernate.)

1 Ответ

2 голосов
/ 23 октября 2011

Вы можете выполнить 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();
...
...