Ich muss alle Produkte finden, die kein bestimmtes Allergen mit Hibernate enthalten.Suchen Hibernate-Objekte ohne viele zu viele Beziehung
Hier ist die SQL verwendet, um die Datenbanktabellen zu erstellen:
CREATE TABLE ALLERGEN (id integer IDENTITY PRIMARY KEY, name varchar(20), UNIQUE (id), UNIQUE(name));
CREATE TABLE PRODUCT (id integer IDENTITY PRIMARY KEY, name varchar(20), UNIQUE (id), UNIQUE(name));
CREATE TABLE PRODUCT_ALLERGEN (product_id integer, allergen_id integer, UNIQUE (product_id, allergen_id), FOREIGN KEY (product_id) REFERENCES PRODUCT (id), FOREIGN KEY (allergen_id) REFERENCES ALLERGEN (id));
Hier sind die Hibernate Java-Klassen kommentierte: erscheint
@Entity
@Table(name = "ALLERGEN")
class Allergen {
@Id
@Column(unique = true, nullable = false)
@GeneratedValue
private Integer id;
private String name;
// ...
}
@Entity
@Table(name = "PRODUCT")
public class Product {
@Id
@Column(unique = true, nullable = false)
@GeneratedValue
private Integer id;
private String name;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(inverseJoinColumns = {@JoinColumn(name = "allergen_id")})
private final Set<Allergen> allergens = new HashSet<>();
// ...
}
Diese SQL mir das Ergebnis zu geben, ich will, aber ich sehe nicht, wie man es mithilfe von Hibernate-Kriterien darstellt.
SELECT * FROM PRODUCT WHERE (SELECT COUNT(*) FROM PRODUCT_ALLERGEN WHERE product_id = PRODUCT.id AND allergen_id = 0) = 0;
Möchten Sie die Abfrage in HQL oder mithilfe der Kriterien-API? –
Ich suchte nach der Lösung in Criteria API, aber ein Äquivalent in HQL wäre auch von Interesse. –
https://www.mkyong.com/hibernate/hibernate-query-example-hql/ – Mahi