У меня
Manufacturer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "manufacturer_id")
private int id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "manufacturerEntity", fetch = FetchType.LAZY)
private Set<Product> productSet;
}
Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "product_id")
private int id;
@Column(name = "price")
private Double price;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "manufacturer_id")
private Manufacturer manufacturerEntity;
}
Это необработанный запрос
SELECT
*
FROM
product INNER JOIN manufacturer
ON product.manufacturer_id = manufacturer.manufacturer_id
WHERE
manufacturer.manufacturer_id = 1
(or product.manufacturer_id = 1)
Как переписать этот запрос в спецификации, я не знаю, как получить Id, потому что у меня 2 Id ( то же имя, как вы можете видеть выше), и я не использую типобезопасный объект, как (Product_). Мне нужно что-то вроде псевдонима для этого запроса
SELECT
*
FROM
product as p
INNER JOIN manufacturer as m ON p.manufacturer_id = m.manufacturer_id
WHERE
m.manufacturer_id = 1
(or p.manufacturer_id = 1)
Это моя спецификация
public static Specification<Product> hasManufacturer(int manufacturerId) {
return (root, query, builder) -> {
Join<Product, Manufacturer> joinProdManu = root.join("manufacturerEntity");
return builder.equal(joinProdManu.get("id"), manufacturerId);
};
}