ORMLite Java,序列的大小写

ORMLite Java, casing of sequences

我正在尝试从 Java 客户端使用 ORMlite 连接到 postgresql。 数据库生成完美,但是当我尝试将某些内容插入到使用自动增量 ID 的 table 中时,出现以下错误:

org.postgresql.util.PSQLException: ERROR: relation "commandusage_id_seq" does not exist

当我检查数据库时,我可以看到一个“commandUsage_id_seq”序列已经创建。大写字母U.

如何配置 ORMLite 以使用相同的大小写来创建数据库和与数据库交互?我在文档中找不到这个

提前致谢。

更新:

当显式设置 sequenceId 时我可以规避这个问题

generatedIdSequence = "commandusage_id_seq"

但我仍然想知道是否可以通过为 ORMLite 设置一些配置而不是为每个 DBObject 设置 class

更新2:

URL 包的防止混淆:ORMLite

更新3:

下面是一段代码及其工作原理。我再次想知道 ORMLite 是否能够自动进行小写转换而不是我明确地进行转换。

@DatabaseTable(tableName = "commandusage", daoClass = CommandUsageDaoImpl.class)
public class CommandUsage {
@DatabaseField(columnName = "id", generatedIdSequence = "commandusage_id_seq")
private transient int identifier;

When I check the DB I can see a "commandUsage_id_seq" sequence has been created. With a Capital U.

有意思。在我最初感到困惑之后,这似乎是 ORMLite 中的一个错误。模式是如果你强制使用大小写混合的 table 名称(典型的是将名称小写),然后在 Postgresql 中请求一个序列号:

@DatabaseTable(tableName = "TableNameCaseWithSeqeuence")
private static class TableNameCaseWithSeqeuence {
    @DatabaseField(generatedId = true)
    public int id;
    ...
}

我已经在主干中找到了一个修复程序,但要发布一个版本还需要一些时间。 现在的解决方法是扩展 PostgresDatabaseType 并将其注入您的 ConnectionSource。它应该做类似的事情:

public OurPostgresDatabaseType extends PostgresDatabaseType {
    // constructors ...
    @Override
    public String generateIdSequenceName(String tableName, FieldType idType) {
        String name = tableName + DEFAULT_SEQUENCE_SUFFIX;
        return downCaseString(name, true);
    }
}