0

DAOを介してクエリをN回実行するループがあります。私の場合、値が「123456789」のプロパティを持つオブジェクトがあります。C1最初のターンでは、特定のテーブルに対してクエリを実行して、 「123456789」に等しい 列を持つすべてのレコードを取得します。

C12番目のターンでは、この同じテーブルに対してクエリを実行して、 「12345678」に等しい列を持つすべてのレコードを取得します。プレフィックスが最も長いレコードが見つかるまで、以下同様に続きます。

このクエリを複数回実行するのではなく、別のクエリを1回だけ実行してみませんか。これは、パラメータとして文字列 "123456789"を取り、"123456789"C1の最長のプレフィックスである列を持つレコードを返します。しかし、Hibernateでそれを行う方法(可能であれば)、または別の解決策があるかどうかはわかりません。MySQLを使用しています。

(私はこの投稿を見ましたが、Hibernateでそれを行う方法があるかどうか知りたいと思いました。)

4

1 に答える 1

2

次のような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();
...
于 2011-10-23T15:14:00.630 に答える