私があなたを正しく理解していれば、そのようなクエリを目的に使用できます。
List<Object[]> results = sess.createCriteria(Category.class, "category")
.add(Restrictions.in("category.name", new String[]{"Test1", "Test2"}))
.createAlias("items", "item")
.setProjection(Projections.projectionList()
.add(Projections.property("category.id"), "categoryId")
.add(Projections.property("category.name"), "categoryName")
.add(Projections.property("item.name"))
.add(Projections.property("item.initialPrice")))
.list();
結果の各行を表す Object[] 配列のリストを返します。
Color エンティティの構造とそこから必要なフィールドがわからないため、カテゴリとアイテムの 2 つのデフォルト エンティティの例を投稿しました (これらの関係は、あなたの場合のように 1 対多です)。
配列の代わりにリストを使用できます。たとえば、上記の例の制限を次のように定義できます。
List<String> inRestrictions = new ArrayList<String>();
inRestrictions.add("Test1");
inRestrictions.add("Test2");
...
.add(Restrictions.in("category.name", inRestrictions))
...
編集:
色のリストを含む Product オブジェクトが必要な場合は、それのみをフェッチします。正しいマッピングを定義すると、Colors リストが (遅延または積極的に) フェッチされます。
List<Product> results = sess.createCriteria(Product.class)
.add(Restrictions.in("... necessary restrictions")
.list()