Я пытаюсь создать 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);
Я также открыт для архитектурных подсказок, потому что после введения Прайса в модель я не уверен, что правильно сделал, что встроил Провайдеров в Продукт.