我有两个实体。一个是 Product,另一个是 ProductCategory。Product 到 ProductCategory 的关系是多对一。我有一种方法来获取所有 ProductCategories。我想向 ProductCategory 添加一个瞬态变量 productCount,它说明有多少产品可用对于每个 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;
}
这两个更好的解决方案是什么?或者任何其他更好的解决方案?我对休眠中的性能比较没有充分的了解。