すべてのテーブルには、created_at
という名前のフィールドがあります。これは、その行が挿入されたときを表すタイムスタンプです。異なるテーブル内の重複するフィールド名は、mybatisで複雑な `SELECT`クエリを作成します。
私は永続性レイヤーとしてmybatis 3を使用しましたが、私はjoin
で何かを照会するとちょっと退屈でした。
<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
があるので、私は、見つかった:私はすべての質問とその回答を得ることが期待単純なSQLで
ルック結果セットでは、2番目のものは無視されます。したがって、答えは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内のすべてのフィールド名を変更する必要があるため、それを読むことが非常に長く、硬くなり、痛みを伴うように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のフィールド名を変更します。
私はmybatisを使いましたが、この問題の解決策はありますか?
であなたの時間を持っています。しかし、私が見つけたのは、 'id'、' user_id'、 'update_at'などの名前が重複しています。 – Freewind
誰か他の人がよく答えない限り、このリンクは参考になるでしょう。http://www.bar54.de/projekte/ ibator-extensions/ibator-sqlmap-column.html – kurochenko
私はそのプラグインではあまり明確ではありません。地図ファイルに 'ibator'でsqlsを生成するときにのみ役に立ちますか?私が手書きでsqlsを書くと、それは役に立ちません。 – Freewind