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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top