Ruhezustandskriterien – Alias
-
23-09-2019 - |
Frage
Ich habe ein wenig Probleme mit dem Alias-Konzept in Hibernate.
Meine Situation ist folgende:
Befehl
@OneToMany(cascade=CascadeType.ALL,mappedBy="m_order")
private Set<OrderDetail> m_details;
Bestelldetails
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="product_id")
private Product m_product;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="order_id")
private Order m_order;
DAO
c.createAlias("m_details", "detail").createCriteria("detail.m_product").add(Expression.idEq(productId));
Ich möchte also jede Bestellung durchsuchen, die ein Produkt enthält.
Bei dieser Abfrage werden jedoch weiterhin 0 Bestellungen zurückgegeben, und ich verstehe nicht wirklich, was ich falsch mache.
Danke!
Lösung
Die Abfrage sieht für mich in Ordnung aus ...Versuchen Sie, "hibernate.show_sql" auf "true" festzulegen, damit Sie die SQL im System.out oder//und protokollieren können.
@lars ja, das kannst du. Kriterien-API – AssoziationenAlias ist nur ein Shortname eines vollständigen Namens/Pfad -Carcriteria.Createalias ("car_parts.wheels", "Räder")
Andere Tipps
Ich bin mir nicht sicher, ob Sie Alias für Dinge verwenden können, die keine Spalte sind, also keine Spalte haben @Column
oder @JoinColumn
-Anmerkung.
Das sieht richtig aus.
In Ihrem DAO-Abschnitt haben Sie bereits eine Variable mit dem Namen „c“ – können Sie den Code posten, in dem diese initialisiert wird?Das dient nur dazu, noch einmal zu überprüfen, ob Sie die ursprünglichen Kriterien mit der Order.class erstellen.
Überprüfen Sie dann als Nächstes, ob Sie das Produkt mit dieser ID wie folgt abrufen können:
Product p = (Product)session.load(Product.class, productId)
Auf diese Weise überprüfen Sie, ob die ID korrekt ist und Hibernate das Produkt finden kann.
Andernfalls müssten wir mit der Betrachtung der generierten SQL beginnen, wie die anderen Kommentatoren vorgeschlagen haben.