JPA获取一对多产生重复

时间:2016-07-14 11:37:59

标签: java spring hibernate jpa

我正在尝试获取看起来像这样的实体:

@Entity
public class Product{

  @OneToMany(mappedBy = "product", cascade = CascadeType.ALL, orphanRemoval = true)
  private List<ProductVersion> versions;

}

但我还必须遍历版本,然后通过内部的一些对象:

@Entity
public class ProductVersion{ 

   @ManyToOne
   @JoinColumn(name = "PRODUCT_ID", nullable = false)
   private Offer offer;

   @OneToMany(mappedBy = "productVersion", cascade = CascadeType.ALL)
   private Set<Objects> objects;

}

因此我需要有一个查询,可以获取版本中的Eagerly版本和对象(以避免N + 1问题)。不幸的是,因为版本在List中,查询会生成dupplicates(不幸的是它必须是List)。结果看起来有点像这样:

Product1{
    version1,
    version1,
    version1,
    version2,
    version2,
    version2
}
Product2{
        version1,
        version1,
        version1,
        version2,
        version2,
        version2
    }

编辑:我当前的查询看起来有点像这样(我正在使用JPAQuery):

QProduct qof = QProduct.product;
QProductVersion qProductVersionAlias = new QProductVersion("qProductVersionAlias ");
JPAQuery query = new JPAQuery(entityManager)
                .distinct()
                .from(qof)
                .join(qof.versions, qProductVersionAlias ).fetch()
                .leftJoin(qOfferVersionAlias.objects).fetch();

我已经发现在Criteria Api中你可以像这样解决这个问题:

criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);  

但是我正在寻找JPA解决方案。所以我的问题是如何使用JPA解决这个问题?

0 个答案:

没有答案