SQL самый длинный префикс String
У меня есть цикл, который выполняет запрос N раз через DAO. В моем случае у меня есть объект со свойством, которое имеет значение "123456789". В первую очередь он выполняет запрос к определенной таблице, чтобы получить все записи, имеющие столбец C1
равно "123456789".
Во втором повороте он выполняет запрос к этой же таблице, чтобы получить все записи, имеющие столбец C1
равно "12345678". И так до тех пор, пока не найдет запись с самым длинным префиксом.
Я подумал, что вместо того, чтобы выполнять этот запрос несколько раз, почему бы не выполнить другой запрос только один раз, который принимает в качестве параметра строку "123456789" и возвращает запись, которая имеет столбец C1
который является самым длинным префиксом "123456789". Но я не знаю, как это сделать с помощью Hibernate (если это возможно) или если у вас есть другое решение. Я использую MySQL.
(Я посмотрел этот пост, но я хотел знать, есть ли способ сделать это с помощью Hibernate.)
1 ответ
Вы можете выполнить 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();
...