Подобный рабочий пример

аюсь реализовать веб-сервис, который принимает список строк, каждая из которых является регулярным выражением. Их необходимо сравнить с шестью столбцами базы данных, и любые строки, которые соответствуют, должны быть возвращены.

Я считаю, что Oracle имеет функцию regexp_like (), которую я мог бы использовать, но я ищуЛучший способ сделать это с помощью Hibernate, поэтому я не работаю против персистентности двигателя.

Я начал с чего-то вроде этого, в котором коллекция участников содержит регулярные выражения:

List<Message> messages = new ArrayList<Message>();
List<Message> m1 = ((Session) entityManager.getDelegate())
    .createCriteria(MessageSSR.class).add(Restrictions.or(
            Restrictions.in("Node2Id", participants),
            Restrictions.in("Node2Id", participants))).list();
List<Message> m2 = ((Session) entityManager.getDelegate())
    .createCriteria(MessageSSR.class).add(Restrictions.or(
            Restrictions.in("Node3Id", participants),
            Restrictions.in("Node4Id", participants))).list();
List<Message> m3 = ((Session) entityManager.getDelegate())
    .createCriteria(MessageSSR.class).add(Restrictions.or(
            Restrictions.in("Node5Id", participants),
            Restrictions.in("Node6Id", participants))).list();
messages.addAll(m1);
messages.addAll(m2);
messages.addAll(m3);

Это не работает, потому что «in» не будет делать то, что я хочу, и это не говорит Hibernate использовать совпадение регулярного выражения.

Это единственный ответ, который я придумал, но выглядит он действительно ужасно:

List<Message> messages = new ArrayList<Message>();
for (String re : participants) {
    List<Message> m1 = ((Session) entityManager.getDelegate())
        .createCriteria(MessageSSR.class)
        .add(Restrictions.or(
                Restrictions.sqlRestriction("regexp_like(NODE_1, " + re + ")"),
                Restrictions.sqlRestriction("regexp_like(NODE_2, " + re + ")")
        )).list();
    List<Message> m2 = ((Session) entityManager.getDelegate())
        .createCriteria(MessageSSR.class)
        .add(Restrictions.or(
                Restrictions.sqlRestriction("regexp_like(NODE_3, " + re + ")"),
                Restrictions.sqlRestriction("regexp_like(NODE_4, " + re + ")")
        )).list();
    List<Message> m3 = ((Session) entityManager.getDelegate())
        .createCriteria(MessageSSR.class)
        .add(Restrictions.or(
                Restrictions.sqlRestriction("regexp_like(NODE_5, " + re + ")"),
                Restrictions.sqlRestriction("regexp_like(NODE_6, " + re + ")")
        )).list();
    messages.addAll(m1);
    messages.addAll(m2);
    messages.addAll(m3);
}

Я пытаюсь передать как можно больше этой информации в Oracle. Эта аппроксимация, вероятно, сработает, но введение ограничений без использования параметров означает, что я теряю большую потенциальную эффективность. Кто-нибудь может увидеть лучший способ сделать это? Для простоты я доверяю регулярным выражениям, которые мне передают.

Ответы на вопрос(2)

Ваш ответ на вопрос