2 つのエンティティがあります。1 つは Product で、もう 1 つは ProductCategory です。Product と ProductCategory の関係は多対 1 です。 ProductCategory ごとに 2 つのソリューションがあります。どちらも正常に動作しています。
ソリューション 1
public List<ProductCategory> getProductCategoryList() {
List<ProductCategory> productCategoryList = this
.getCurrentSession()
.createQuery(
"SELECT pc FROM ProductCategory pc")
.list();
for (ProductCategory category : productCategoryList) {
String categoryId = category.getId().toString();
category.setProductsCount(getCurrentSession()
.createQuery(
"SELECT p FROM Product p WHERE p.productCategory.id=:categoryId")
.setParameter("categoryId", Long.parseLong(categoryId))
.list().size());
}
return productCategoryList;
}
ソリューション 2
public List<ProductCategory> getProductCategoryList() {
List<ProductCategory> productCategoryList = new ArrayList<ProductCategory>();
List<Object[]> resultList = this.getCurrentSession()
.createQuery("FROM Product p right join p.productCategory")
.list();
for (Object[] array : resultList) {
Product product = null;
ProductCategory productCategory = null;
if (array[1] != null) {
productCategory = (ProductCategory) array[1];
}
if (array[0] != null) {
product = (Product) array[0];
productCategory.setProductsCount(productCategory
.getProductsCount() == null ? 1 : productCategory
.getProductsCount() + 1);
}
if (productCategory != null
&& !productCategoryList.contains(productCategory)) {
productCategoryList.add(productCategory);
}
}
return productCategoryList;
}
これら2つのより良い解決策は何ですか? または他のより良い解決策はありますか?休止状態でのパフォーマンスの比較については、十分な知識がありません。