ORMlite通过三个表连接和排序

时间:2014-03-22 16:27:41

标签: sql join many-to-many sql-order-by ormlite

我有多对多的关系,我试图通过一方订购。所以在SQL中这将是:

select * from 
patient join patientuserrelation on patient.id=patientuserrelation.p_id
join user on patientuserrelation.u_id=user.id
order by user.name

我在Ormlite中实现了:

QueryBuilder<Visit, String> qbVisit = setupAccess(Visit.class)
                .queryBuilder();
QueryBuilder<UserVisitRelation, String> qbUserVisitRelation = setupAccess(
                        UserVisitRelation.class).queryBuilder();
QueryBuilder<User, String> qbUser = setupAccess(User.class)
                    .queryBuilder();
qbUser.orderBy(sortByThisColumn, true);
qbUserVisitRelation.join(qbUser);
qbVisit.join(qbUserVisitRelation);

return qbVisit.distinct().query();

然而,这不起作用。结果根本没有订购。我可以尝试使用rawSQL和rawRowMapper,但这会使我的代码膨胀。 这里有一个类似的问题:ORMLITE order by a column from another table。不幸的是没有答案。是否有一位乐于助人的专家?

1 个答案:

答案 0 :(得分:1)

好的,回答我自己的后代问题:似乎在ormlite 4.48中不支持跨多个表的连接和顺序。如果你想一会儿,你会弄清楚为什么会出现这种情况。无论如何,解决方案是编写一个原始的sql语句,只选择没有外部集合的必要列,并使用RawRowMapper和GenericRawResults将其强制转换为您的对象。使用ORM时不是您想要做的,但确定。