1

我在 Oracle (10g) 数据库中有许多表中的三个,如下所示。我正在使用带有 Spring 3.0.2 版的 Hibernate Tools 3.2.1.GA。

  1. 产品- 父表
  2. 颜色- 父表
  3. ProductColour - 连接表 - 分别引用colourIdprodIdofColourProduct

其中ProductColour是和之间的连接表。正如表名所暗示的,和之间存在多对多的关系。我认为,数据库中的关系很容易想象,只有这么多信息就很清楚了。因此,我不打算详细探讨这种关系。ProductColourProductProductColour

in 中的一个实体(行)与 inProduct中的任意数量的实体相关联,Colour并且 in 中的一个实体(行)Colour也可以与 in 中的任意数量的实体相关联Product


举个例子,我需要计算Product表中可用的行数(关于 Hibernate),可以这样做如下所示。

Object rowCount = session.createCriteria(Product.class)
                  .setProjection(Projections.rowCount()).uniqueResult();

如果我需要计算ProductColour表中可用的行数怎么办?由于它是多对多关系,因此它被映射ProductColour实体类 (POJO) 中,并且相应的表中没有可用java.util.Set的直接 POJO 类。ProductColour所以前面的行计数语句在这种情况下似乎不起作用。

有没有一种精确的方法来计算Hibernate中这种连接实体的行数?

4

1 回答 1

1

我认为您应该能够沿线进行 JPQL 或 HQL。

SELECT count(p.colors) FROM Product AS p WHERE p.name = :name ... other search criteria etc 

或者

SELECT count(c.products) FROM Color AS c WHERE c.name = :name .... other search criteria 

从下面的评论中,这应该有效:

Long colours=(Long) session.createQuery("select count(*) as cnt from Colour colour where colour.colourId in(select colours.colourId from Product product inner join product.colours colours where product.prodId=:prodId)").setParameter("prodId", prodId).uniqueResult();
于 2012-11-12T21:34:50.210 回答