Я использую 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`.