我正在尝试将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

在框架中进行更改以强制使用特定的方言应该很容易,但是我们希望使用开源数据库。如果您是封闭源,那么您将维护该方言。

10-07 22:28