使用ActiveJDBC的原始SQL

时间:2015-01-20 19:16:53

标签: java activejdbc

似乎使用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");

既没有奏效。有没有其他方法来获得这三个表的联合?

2 个答案:

答案 0 :(得分:3)

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

具体来说,JavaDoc声明:&#34;确保查询返回与此模型关联的所有列,以便生成的模型可以正确地保持水分&#34;

这意味着你不能随意选择任何你想要的东西,但是查询必须只选择与它前面相关的列。如果您只需要使用任何原始SQL并返回所需内容,则可能需要使用类Base或DB。有关更多信息,请参阅此JavaDoc:

Base#findAll()Base#find()

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

答案 1 :(得分: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);