このクエリを休止状態で実装する方法は?
select tab1.name from table1 tab1, table2 tab2 where table1.id = table2.id
このクエリを休止状態で実装する方法は?
select tab1.name from table1 tab1, table2 tab2 where table1.id = table2.id
次のようなプロジェクションAPIを使用する必要があります
Criteria criteria = session.createCriteria(table1.class);
criteria.setFetchMode("table2", FetchMode.JOIN).add(Restrictions.eq("id", 2));
ProjectionList proList = Projections.projectionList();
proList.add(Projections.property("name"), name);
criteria.setProjection(proList);
List list = criteria.list();
また、上記の例ではエイリアスは使用されていませんが、エイリアスを使用できます。非常に簡単に使用できます。
これが役立つと思います。
Criteria criteria = session.createCriteria(table1.class);
criteria.setFetchMode("table2", FetchMode.JOIN).add(Restrictions.eq("id", 2));
ProjectionList proList = Projections.projectionList();
proList.add(Projections.property("name"), name);
criteria.setProjection(proList);
List list = criteria.list();
良い解決策:
2 つのテーブルの間には関係があります。この関係は、1 対 1、1 対多、多対 1、または多対多です。マッピングでこの関係を作成します。たとえば、table2 が table1 の子である場合、table1 クラスとマッピングで、前述の関係のいずれかを使用してプロパティを作成し、「from table1」という HQL ステートメントを使用して table1 のみをロードします (オプションの where-condition を使用します。オプションで、 2 つのテーブル間の内部結合を指定できます)、 table1.getTable2()
(1:1 または n:1 の関係) またはtable1.getTable2List()
(1:n または n:m の関係)で table2 にアクセスします。
ずさんな解決策(ただし、選択が特別な状況でのみ使用される場合はまったく問題ありません):
HQLselect table1.col1, table1.col2, table2.col1 from table1 inner join table2 where ...
で実行してオブジェクトの配列のリストをselect new Tabble1Table2Pojo(table1.col1, table1.col2, table2.col1) from table1 inner join table2 where ...
評価するか、代わりに Tabble1Table2Pojo のリストを実行して評価します。