以下に示すように、Oracle(10g)データベースには多くのテーブルのうち3つがあります。Springバージョン3.0.2でHibernateTools3.2.1.GAを使用しています。
- 製品-親テーブル
- 色-親テーブル
- ProductColour-テーブルの結合-参照
colourId
とprodId
ofColour
およびProduct
テーブルそれぞれ
ここで、はとの間のProductColour
結合テーブルです。テーブル名が示すように、との間には多対多の関係があります。データベース内の関係は簡単に想像でき、これだけの情報で明確になると思います。したがって、この関係について詳しく説明するつもりはありません。Product
Colour
Product
ProductColour
の1つのエンティティ(行)Product
は、の任意の数のエンティティに関連付けられColour
、の1つのエンティティ(行)はColour
、の任意の数のエンティティに関連付けることもできますProduct
。
たとえば、Product
テーブルで使用可能な行数をカウントする必要があるとしましょう(Hibernateに関して)。これは、次のように実行できます。
Object rowCount = session.createCriteria(Product.class)
.setProjection(Projections.rowCount()).uniqueResult();
ProductColour
テーブルで使用可能な行数をカウントする必要がある場合はどうなりますか?これは多対多の関係であるため、Product
およびColour
エンティティクラス(POJO)にマッピングされ、テーブルjava.util.Set
の直接POJOクラスは使用できません。ProductColour
したがって、前述の行カウントステートメントはこのシナリオでは機能しないようです。
Hibernateでそのような結合エンティティの行数をカウントする正確な方法はありますか?