2015-01-20 43 views
0

似乎使用ActiveJDBC是非常有限原始SQL与ActiveJDBC

我有三个表A,B和C都具有文本列 我想所有这些表的

我试图

工会
LazyList<A> list = A.findBySQL("(select name as text from a) union (select version as text from b) union (select id as text from c) 

,我试图

LazyList<A> list = A.findBySQL("select a.* from ((select name as text from a) union (select version as text from b) union (select id as text from c)) as a"); 

既不工作。有没有其他的方式来获得这三个表的联合?

回答

3

请记住,ActiveJDBC是一个ORM,查询返回的所有属性必须与每个模型的表模式匹配。请在这里看到:Model#findBySQL()

具体来说,JavaDoc中指出:“确保查询返回与此模型相关联的所有列,因此所得到的模型可以适当滋润本身”

这意味着你不能威利选择 - 无论你想要什么,但查询必须只选择与它前面的表相关的列。如果您只需要使用任何原始SQL并返回所需内容,则可能需要使用Base或DB类。请参阅此JavaDoc以获取更多信息:

Base#findAll()Base#find()

阅读文档以确定哪种方法最适合您。

0

我在这里有同样的问题。 我的解决办法是:

String query = "select a.* from ((select name as text from a) union (select version as text from b) union (select id as text from c)) as a"; List<Map> result = new DB("default").all(query);

+0

这会工作。最后一行与'List result = Base.findAll(query);' – ipolevoy 2016-07-20 16:18:21