gpt4 book ai didi

android - GreenDAO 左加入

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:42:20 25 4
gpt4 key购买 nike

假设我有一个模型:公司 1 - N 人

我想显示一个包含他们的姓名和公司名称的人员列表。但并不是每个人都有公司。

我为了避免每次调用 person.getCompany() 都会产生一个新的 SQL 查询,所以我考虑添加一个连接:

QueryBuilder<Person> queryBuilder = session.getPersonDao().queryBuilder();
queryBuilder.join(PersonDao.Properties.CompanyId, Company.class);
queryBuilder.list()

问题是我只得到公司的人员,因为生成的查询使用 JOIN,它等同于 INNER JOIN。我想我还需要 LEFT JOIN 才能找到没有公司的人。

GreenDAO 现在似乎不支持 LEFT JOIN。有没有另一种方法可以在不执行原始查询的情况下发出请求?

最佳答案

它可以在不编写原始查询的情况下实现。

这是 fragment :

QueryBuilder<Person> qb = userDao.queryBuilder();
List<Person> outputPersonList = userDao.queryDeep(" ", null);

它在低级别编译为:

SELECT T."_id",T."NAME",T."COMPANY_ID",T0."_id",T0."NAME" 
FROM PERSON T
LEFT JOIN COMPANY T0
ON T."COMPANY_ID"=T0."_id"

当然,如果 Person 模型有其他关系,所有这些都将被提取,所以这个 SQL 查询会很慢。

但是,它基本上符合您的预期。

关于android - GreenDAO 左加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39034291/

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