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);
}
}
我正在尝试从 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);
}
}