ORMLite Java,序列的外壳

ORMLite Java,序列的外壳,java,postgresql,ormlite,quoted-identifier,Java,Postgresql,Ormlite,Quoted Identifier,我正在尝试从Java客户端使用ORMlite连接到postgresql。 DB的生成非常完美,但当我尝试在使用autoincrement id的表中插入某些内容时,会出现以下错误: org.postgresql.util.PSQLException: ERROR: relation "commandusage_id_seq" does not exist 当我检查数据库时,我可以看到已经创建了一个“commandUsage\u id\u seq”序列。以大写字母U 如何将O

我正在尝试从Java客户端使用ORMlite连接到postgresql。 DB的生成非常完美,但当我尝试在使用autoincrement id的表中插入某些内容时,会出现以下错误:

org.postgresql.util.PSQLException: ERROR: relation "commandusage_id_seq" does not exist
当我检查数据库时,我可以看到已经创建了一个“commandUsage\u id\u seq”序列。以大写字母U

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

谢谢你

更新:

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

generatedIdSequence = "commandusage_id_seq"
但我仍然想知道,通过为ORMLite设置一些配置,而不是为每个DBObject类设置配置,这是否可行

更新2:

用于防止混淆的包的URL:

更新3:

下面是代码片段及其工作原理。我还想知道ORMLite是否能够自动进行到小写的转换,而不是显式地进行转换

@DatabaseTable(tableName = "commandusage", daoClass = CommandUsageDaoImpl.class)
public class CommandUsage {
@DatabaseField(columnName = "id", generatedIdSequence = "commandusage_id_seq")
private transient int identifier;
当我检查数据库时,我可以看到已经创建了一个“commandUsage\u id\u seq”序列。以大写字母U

有趣。在我最初的一些困惑之后,这看起来像是ORMLite中的一个bug。这种模式是,如果您强制使用大小写混合的表名(典型的做法是将名称降格),然后在Postgresql中要求在其上输入序列id:

@DatabaseTable(tableName = "TableNameCaseWithSeqeuence")
private static class TableNameCaseWithSeqeuence {
    @DatabaseField(generatedId = true)
    public int id;
    ...
}
我的后备箱有一个补丁,但要想发布一个版本还需要一点时间。 现在的解决方法是扩展
PostgresDatabaseType
,并将其注入到
连接源中。它应该像这样做:

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

您好,这是针对.NET的,看起来ORMLite for Java没有NamingStrategy选项,或者我在文档中遗漏了它。啊,我的错,这有帮助吗?您可以为列名定义自己的覆盖,它在数据库中的显示方式。您好,建议不错,但序列不是列名,因此该选项不起作用。如果您检查我的原始答案,第一次更新是一个可行的解决方案。从技术上讲,它是一个列名,但您允许orm lite创建主键列,并且您定义列名的方式是官方支持的方式。类读取器中有一些方法强制使用英语语言环境作为默认值的upCase。您可以尝试分叉orm lite并修改数据库解释代码。是的,我做到了。使用generatedIdSequence,我能够自动生成和标识列,并为列命名。虽然这不是我真正想要的。就像我说的,这不是名字错的问题。导致问题的是外壳问题。PostgreSQL要求所有小写字母,而ORMLite使用的是混合大小写。我在问题OK中添加了一个片段。这是一个bug@Nick,现在我明白了这个问题。我已经编辑了我的答案,以显示一个变通方法,我希望很快推出一个新版本。感谢回复和变通方法。我很快就会试试的。将您的答案标记为解决方案