gpt4 book ai didi

android - ORM Lite Android 表名中的未知列名

转载 作者:行者123 更新时间:2023-11-30 03:13:46 24 4
gpt4 key购买 nike

我正在使用 ORM Lite在我的 android 应用程序中,我在通过过滤外部字段进行搜索时遇到问题,我将在下面发布我的类(class):

public class Estabelecimento {

@DatabaseField(generatedId = true)
private int id;

@DatabaseField
public static long codigo;

@ForeignCollectionField(eager=false)
private Collection<SituacaoProduto> situacoesProduto;

...
}

public class SituacaoProduto {

@DatabaseField(generatedId = true)
private int id;

@DatabaseField
private long codigo;

@DatabaseField
private String situacao;

@DatabaseField(foreign=true)
private Produto produto;

@DatabaseField(foreign=true,foreignAutoRefresh=true)
private Estabelecimento estabelecimento;

...
}

这将是我的查找方法:

public List<SituacaoProduto> findByEstabelecimento(Estabelecimento estabelecimento, Context context){

List<SituacaoProduto> list = new ArrayList<SituacaoProduto>();

try{
Dao<SituacaoProduto, Integer> dao = getDatabase(context).getDao(SituacaoProduto.class);
QueryBuilder<SituacaoProduto, Integer> qBuilder = dao.queryBuilder();
// Monta select: (estabelecimento.codigo == codigoEstabelecimento)
qBuilder.where().eq("estabelecimento.codigo", estabelecimento.getCodigo());
PreparedQuery<SituacaoProduto> pQuery = qBuilder.prepare();

// Recupera registro
list = dao.query(pQuery);

}catch(SQLException e){
e.printStackTrace();
return null;
}finally{
if (database != null) {
OpenHelperManager.releaseHelper();
database = null;
}
}

return list;
}

我收到以下错误:

12-10 10:32:25.398: E/AndroidRuntime(19575): java.lang.IllegalArgumentException: Unknown column name 'estabelecimento.codigo' in table situacaoproduto

就好像没有提到国外的 cheve,如果我输入我的 estabelecimento_id 查找方法来搜索它让我避免错误,但不需要通过 codigo 过滤,它是来自 Web 服务的代码:

在这里我找到了一个解决方案,(link)但我拒绝这样做,将类属性声明为 public static final 是一种不好的做法

有什么帮助吗?

最佳答案

我想你想加入这里。您正在尝试返回其 estabelecimento 字段的 codigo 等于某个值的 SituacaoProduto,对吗?

因此,使用 estabelecimentoDao 构建一个查询,其中 codigo 字段 eq(...)。然后将该查询与 situacaoProdutoDao 查询连接起来。

有关 ORMLite 的连接功能的详细信息,请参见此处:

http://ormlite.com/docs/join-queries

我认为文档中的示例查询与您的需求非常相似。

declare class attributes as public static final is a bad practice".

为什么它是一个坏模式? ORM 库怎么知道你查询的是哪个字段?问题是,如果您不指定列名,ORMLite 会为您的外部字段生成一个。他们在该字段上查询的唯一方法(如果您不想使用上面的连接机制)是指定名称,然后导出该名称,以便您的查询代码可以使用它。与 public static final 共享相同的字符串对我来说很有意义。

关于android - ORM Lite Android 表名中的未知列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20494942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com