私は正規表現である文字列のリストを受け付けるWebサービスを実装しようとしています。これらはデータベースの6列と比較する必要があり、一致する行はすべて返す必要があります。 Hibernate/Oracleでの正規表現の使い方
私は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);
「に」私がやりたいことはありませんので、これは動作しません、これは表示されません。 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への上にこれの限りをプッシュしようとしています。このアプラックはうまくいくと思われますが、パラメータを使用せずに制限を加えることは、潜在的な効率をほとんど失うことを意味します。誰もこれを行うためのより良い方法を見ることができますか?簡単にするために、私は正規表現が私に渡されていると信じています。
は素晴らしい作品。 –