Android ORMlite查询生成器,其中A和B以及C和(D或E或F)

Android ORMlite查询生成器,其中A和B以及C和(D或E或F),android,query-builder,ormlite,Android,Query Builder,Ormlite,我不确定我遗漏了什么,但我并不是在摸索如何在ORMlite中QueryBuilder的Where语句上使用或()函数 我有一个查询,我希望它是: 其中A和B以及C和(D或E或F) 但代码生成的是: 其中(A和B以及C和D)或E或F 不仅D包含在和子句中,而且E和F都是未分组的,这意味着将返回与E匹配的任何行,但我需要A、B和C作为所有行的要求 我已经看过了ORMlite示例代码和or()函数的描述,但它们似乎都集中在(A和B)或(C和D)场景上,这不是我想要做的。我试图找出代码在我的情况下应该如

我不确定我遗漏了什么,但我并不是在摸索如何在ORMlite中QueryBuilder的Where语句上使用
或()
函数

我有一个查询,我希望它是:

其中A和B以及C和(D或E或F)

但代码生成的是:

其中(A和B以及C和D)或E或F

不仅
D
包含在
子句中,而且
E
F
都是未分组的,这意味着将返回与
E
匹配的任何行,但我需要
A
B
C
作为所有行的要求

我已经看过了ORMlite示例代码和
or()
函数的描述,但它们似乎都集中在
(A和B)或(C和D)
场景上,这不是我想要做的。我试图找出代码在我的情况下应该如何工作,但这确实是错误的,因此我不知道在如何使用
或()

有什么帮助吗

protected void addWhereClauses(Where<Sheep, Integer> whereClause) throws SQLException {

    whereClause
            .eq("owner_id", this.owner.getId()) // A
            .and()
            .isNull("markedfordeletiondate") // B
            .and()
            .eq("isownedbyme", this.currentlyShowingSheepMine); // C


    String filterstring = getFilterString();
    if (filterstring != null) {
        filterstring = "%"+filterstring+"%";
        whereClause.and()
                .or(
                    whereClause.like("name", filterstring), // D
                    whereClause.like("tag", filterstring), // E
                    whereClause.like("scrapietag", filterstring) // F
                )
        ;
    }
}

好的,我想我找到了一个方法来让它工作,但我不确定这是我应该如何“正确地”做它。请告诉我是否有更好的方法来做这件事

第一个变化是,我捕获了最初的ABC子句,并将它们传递回另一个
和()

protected void addWhereClauses(QueryBuilder<Sheep, Integer> queryBuilder, Where<Sheep, Integer> whereClause) throws SQLException {

    Where<Sheep, Integer> mainClause = whereClause
            .isNull("markedfordeletiondate")
            .and()
            .eq("isownedbyme", this.currentlyShowingSheepMine);


    String filterstring = getFilterString();
    if (filterstring != null) {
        String likestring = "%"+filterstring+"%";

        whereClause.and(
            mainClause,
            whereClause.or(
                    whereClause.like("name", likestring), // D
                    whereClause.like("tag", likestring), // E
                    whereClause.like("scrapietag", likestring) // F
            )
        );

    }
}
受保护的void addWhereClaires(QueryBuilder QueryBuilder,whereClaire)抛出SQLException{
Where main子句=Where子句
.isNull(“markedfordeletiondate”)
.及()
.eq(“isownedbyme”,此.currentlyShowingSheepMine);
字符串filterstring=getFilterString();
如果(filterstring!=null){
字符串likestring=“%”+过滤器字符串+“%”;
其中第条。和(
主要条款,
第条。或(
where子句.like(“name”,likestring),//D
where子句.like(“tag”,likestring),//E
whereClause.like(“scrapietag”,likestring)//F
)
);
}
}

您如何知道它正在生成这些信息?纯粹基于结果?我正在让查询生成器吐出原始SQL,以便我可以查看它以进行调试。我用我用来记录sql语句的代码更新了上面的帖子。如果or()方法包含许多参数,我个人看不出你的方法有什么问题。尝试在ormlite站点上制作错误报告?如果这实际上是一个bug,是否有可能切换到另一个ORM解决方案?
protected void addWhereClauses(QueryBuilder<Sheep, Integer> queryBuilder, Where<Sheep, Integer> whereClause) throws SQLException {

    Where<Sheep, Integer> mainClause = whereClause
            .isNull("markedfordeletiondate")
            .and()
            .eq("isownedbyme", this.currentlyShowingSheepMine);


    String filterstring = getFilterString();
    if (filterstring != null) {
        String likestring = "%"+filterstring+"%";

        whereClause.and(
            mainClause,
            whereClause.or(
                    whereClause.like("name", likestring), // D
                    whereClause.like("tag", likestring), // E
                    whereClause.like("scrapietag", likestring) // F
            )
        );

    }
}