0

我正在尝试编写一个自定义 SQLite 函数,该函数需要两个参数并与 Apache Cayenne 一起运行,performQuery()它看起来像:

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 中,您通常使用具有多个连接的连接池。此外,这些可以对应用程序的其余部分透明地关闭和重新打开。您需要考虑到这一点。

换句话说,您需要确保池中的每个连接都注册了此函数。一种快速而肮脏的方法可能是将池限制为单个连接。更高级和更简洁的解决方案是实现您自己的DataSourceFactory并在启动时通过自定义模块将其加载到 Cayenne 运行时中。一个实现将包装创建新连接的方法,为每个方法添加自定义函数。

于 2015-02-28T07:38:22.693 回答