【问题标题】:ORMLite trying to load field without @DatabaseField annotationORMLite 尝试加载没有 @DatabaseField 注释的字段
【发布时间】:2018-02-22 16:38:32
【问题描述】:

我有 2 个类,如下所示:

@Getter
@Setter
@NoArgsConstructor
@DatabaseTable(tableName = "condicao_ambiental")
public class CondicaoAmbiental {
    @Expose
    @DatabaseField(id = true, columnName = "id")
    private UUID id;
    @Expose
    @DatabaseField(dataType = DataType.DATE_LONG)
    private Date dataCriacao;
    @Expose
    @DatabaseField(columnName = "idUsuario", foreign = true, foreignAutoRefresh = true)
    private Usuario usuario;
    ...
}   

@Getter
@Setter
@NoArgsConstructor
@DatabaseTable(tableName = "usuario")
public class Usuario {
    @Expose
    @DatabaseField(id = true, columnName = "id")
    private UUID id;
    @DatabaseField(foreign = true, columnName = "idCliente")
    private Cliente cliente;
    @DatabaseField
    private String nome;
    @DatabaseField
    private String login;
    private String senha;
    ...
}

这些类中使用的注解来自LombokRetrofit2OrmLite5

当我查询列出 CondicaoAmbiental 时,会出现此错误:

java.sql.SQLException: Unknown field 'senha' from the Android sqlite cursor, not in:[id, idCliente, nome, tipoSindicato, dataCadastro, diasTeste]

senha 列未注释为字段。

当我查询列表Usuario 时,一切运行正常并且列表已加载。 如果我从字段usuario 中删除foreignAutoRefresh=true,则不会发生错误。

谁能告诉我我错过了什么?

【问题讨论】:

  • 您是否有过时的 ormlite.txt 配置文件?
  • 我不确定,但我从来没有配置过这样的文件
  • 字段使用是否被标记为@DatabaseField? ORMlite 特别不应该选择未标记的字段。这让我想知道是否需要重新编译或重新生成配置文件。
  • 是的。我已经把 foreignAutoRefresh=true 放回去了,它现在可以工作了。可能是因为过去几天我已经多次清理和构建该项目。谢谢!

标签: android sqlite ormlite


【解决方案1】:

正如Gray 所解释的,解决方案只是重新编译项目,以便 ORMLite 可以重新生成配置文件。

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多