我正在使用Hibernate 5.3。我正在尝试找到一种使用Criteria API连接具有单向关系的实体的方法。
在以下示例中,ProductRating
实体与ClientProduct
具有多对一关系,但是ClientProduct
实体没有关于ProductRating
的信息。
@Entity
@Table(name = "product_ratings")
public class ProductRatingImpl implements ProductRating {
private ClientProduct clientProduct;
@ManyToOne(targetEntity = ClientProductImpl.class)
@JoinColumn(name = "client_product_id")
@Override
public ClientProduct getClientProduct() {
return clientProduct;
}
使用CriteriaBuilder
,已使用ClientProduct
类创建查询和根目录。
final CriteriaBuilder criteriaBuilder = getCurrentSession().getCriteriaBuilder();
final CriteriaQuery<ClientProductImpl> clientProductCriteriaQuery = criteriaBuilder.createQuery(ClientProductImpl.class);
final CriteriaQuery<ProductRatingImpl> productRatingCriteriaQuery = criteriaBuilder.createQuery(ProductRatingImpl.class);
final Root<ClientProductImpl> clientProductRoot = clientProductCriteriaQuery.from(ClientProductImpl.class);
final Root<ProductRatingImpl> productRatingRoot = ProductRatingCriteriaQuery.from(ProductRatingImpl.class);
final Join<ClientProductImpl, ProductImpl> productJoin = clientProductRoot.join("product", JoinType.INNER);
final Join<ClientProductImpl, ProductCategoryImpl> productCategoryJoin = productJoin.join("productCategory", JoinType.INNER);
// Need to join `ProductRatingImpl` here with `clientProductRoot`.