我正在尝试编写一个自定义 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 包装而失败。
最佳答案
我的理解是,无论您使用什么方法来注册函数,它都只会发生在单个连接上。在 Cayenne 中,您通常使用具有多个连接的连接池。此外,这些可以对应用程序的其余部分透明地关闭和重新打开。您需要考虑到这一点。
换句话说,您需要确保池中的每个连接都注册了此函数。一种快速但肮脏的方法可能是将池限制为只有一个连接。更先进、更干净的解决方案是实现您自己的 DataSourceFactory并在启动时将其加载到 Cayenne 运行时 via a custom module 。一种实现将包装创建新连接的方法,为每个连接添加自定义函数。
关于java - 如何创建自定义 SQLite 函数并在 Cayenne 下执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753965/