0

performQuery()2 つの引数を取り、次のようなApache Cayenne で実行するカスタム SQLite 関数を作成しようとしています。

String query = "SELECT * FROM TABLE WHERE MYFUNC(arg1, arg2) <= SOME_VALUE"

ObjectContext ctx = ...
ctx.performQuery(query)

を使用してみorg.sqlite.Function.create()ましたが、接続が Cayenne によってラップされているため失敗しました。

4

1 に答える 1

1

私の理解では、関数を登録するために使用している方法が何であれ、それは単一の接続でのみ発生します。Cayenne では、通常、複数の接続を持つ接続プールを使用しています。さらに、これらはアプリの残りの部分に対して透過的に閉じたり、再度開いたりすることができます。これを考慮する必要があります。

つまり、プール内の各接続がこの関数を登録するようにする必要があります。プールを 1 つの接続だけに制限するのは、手っ取り早い方法かもしれません。より高度でクリーンなソリューションは、独自のDataSourceFactoryを実装し、カスタム モジュールを介して起動時に Cayenne ランタイムにロードすることです。実装では、新しい接続を作成するメソッドをラップし、それぞれにカスタム関数を追加します。

于 2015-02-28T07:38:22.693 に答える