HQL объединяет элементы коллекции - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь создать HQL, который свяжет мои продукты с ценами, если цена указана для данного продукта и поставщика.

// The main entity
@Entity public class Product {
    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;

    @ManyToMany
    private Set<Provider> providers;
}

// Contained in Product as Set<Provider>
@Entity public class Provider {
    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;

    private String address;
}

// Each provider can have its own Price for given Product
@Entity public class Price {
    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @OneToOne
    private Product product;

    @OneToOne
    private Provider provider;

    private BigDecimal amount;
}

Я хотел бы написать HQL, который будет возвращать некоторый SearchResultDTO, содержащийПродукты с поставщиками и ценами.

Чтобы получить это, мне нужно присоединиться к ценам на наборе поставщиков, который находится внутри продукта, и я не знаю, как это сделать.

Собственный SQL, который выполняетзадание:

// The SQL
SELECT prod.name, prov.name, pr.amount
FROM product prod
LEFT OUTER JOIN products_providers pp ON pp.product_id = prod.id
LEFT OUTER JOIN provider prov ON prov.id = pp.providers_id
LEFT OUTER JOIN price pric ON (pric.product_id = prod.id AND pric.provider_id = prov.id);

Я также открыт для архитектурных подсказок, потому что после введения Прайса в модель я не уверен, что правильно сделал, что встроил Провайдеров в Продукт.

...