2015-01-20 2 views
0

, кажется, что использование ActiveJDBC очень ограничиваетRaw SQL с ActiveJDBC

У меня есть три таблицы а, Ь и с всеми они имеют текстовый столбец Я хочу, чтобы объединение все этой таблицы

Я попытался

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 гласит: «Убедитесь, что запрос возвращает все столбцы, связанные с этой моделью, так что полученные модели могут увлажнять себя должным образом»

Это означает, что вы не можете выбрать Willy -нелли все, что угодно, но в запросе должны быть выбраны только столбцы, связанные с таблицей. Если вам нужно использовать только какой-либо необработанный 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

Смежные вопросы