我正在尝试将ActiveJDBC与旧式DB结合使用,其中表和列通常在名称中包含连字符。这对于SELECT
可以正常使用,因为我可以引用标识符(例如Model.where("\"stupid-name\" = ?", 1)
)。 INSERT / UPDATE出现问题,因为DefaultDialect
生成的SQL不引用标识符。
我正在考虑为此数据库类型实现自定义方言(它是Progress OpenEdge BTW),但首先有两个问题:
在上游ActiveJDBC中是否可以为这种DB(封闭源,需要许可证AFAICT)提供方言?
如果没有,我可以使用外部维护的方言吗?
使用加引号的标识符的更改对其他数据库类型也有用吗?
最佳答案
有一种方法可以使用反斜线来定义表名:@Table("`PEOPLE`")public class Person(){}
它已经过测试,可以与多个数据库一起使用。列的名称来自数据库,因此它们用于生成返回数据库的查询,因为ActiveJDBC是直通框架:http://javalite.io/pass_through_framework。
在框架中进行更改以强制使用特定的方言应该很容易,但是我们希望使用开源数据库。如果您是封闭源,那么您将维护该方言。