У меня есть несколько таблиц, у всех из которых есть поле с именем created_at
, это временная метка для представления при вставке строки.
Теперь я использую mybatis 3 в качестве слоя персистентности, мне было немного скучно, когда я что-то запрашиваю с join
.
Посмотрите на простой SQL, я ожидал получить все вопросы и ответы на них:
<select id="selectQuestionsWithAnswers">
select q.*, a.* from questions as q left inner join answers as a
on q.id=a.id
order by a.created_at desc
</select>
Но я обнаружил, что как questions
, так и answers
оба имеют поле created_at
, и если я напишу select q.*, a.*
, в наборе результатов будет 2 created_at
, а второе игнорируется. Таким образом, ответы будут иметь значение created_at
как questions
, это не правильно.
Чтобы избежать этого, я нашел 2 способа, но оба не хороши:
Измените имена полей каждой таблицы, убедитесь, что они не совпадают. Например: questions.created_at
-> questions.q_created_at
, answers.created_at
-> answers.a_created_at
.
Это нехорошо, поскольку таких полей много, как id
, name
, title
, updated_at
, что затрудняет чтение и ведение базы данных для изменения этих имен
Изменить SQL . Измените имена полей в sql, например:
select q.id as q_id, q.title as q_title, ..., q.created_at as q_created_at,
a.id as a_id, a.content as a_content, ..., a.created_at as a_created_at
from questions as q left inner join answers as a
on q.id=a.id
order by a.created_at desc
Это нехорошо, потому что мне нужно менять каждое имя поля в SQL, оно становится очень длинным и трудным для чтения, и каждый раз больно писать такие SQL.
Я новичок в mybatis, есть ли лучшее решение для этой проблемы?