1

Hibernate のエイリアスの概念に少し苦労しています。
私の状況は次のとおりです

@OneToMany(cascade=CascadeType.ALL,mappedBy="m_order")
private Set<OrderDetail> m_details; 

注文詳細

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="product_id")
    private Product m_product;
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="order_id")
    private Order m_order;

ダオ

c.createAlias("m_details", "detail").createCriteria("detail.m_product").add(Expression.idEq(productId));

そのため、製品を含むすべての注文を検索したいと考えています。
ただし、このクエリでは 0 件の注文が返され続け、何が間違っているのかわかりません。
ありがとう!

4

3 に答える 3

1

クエリは私には問題ないように見えます...「hibernate.show_sql」を「true」に設定してみてください。これにより、実際に System.out で SQL を確認したり、log4j.logger.org.hibernate.SQL=DEBUG をログに記録したりできます。 SQL_APPENDER

@larsはい、できます。Criteria API - アソシエーション エイリアスは、完全な名前/パスの短縮名です carCriteria.createAlias("car_parts.wheels", "wheels")

于 2010-03-30T08:12:57.037 に答える
0

列ではないもの、つまり@Columnor@JoinColumn注釈を持たないものにエイリアスを使用できるかどうかはわかりません。

于 2010-03-30T07:39:54.143 に答える
0

それは正しいようです。

DAO セクションには、既に「c」という名前の変数があります。これを初期化するコードを投稿できますか? これは、Order.class を使用して元の基準を作成していることを再確認するためのものです。

次に、次のようにして、その ID で製品を取得できるかどうかを確認します。

Product p = (Product)session.load(Product.class, productId)

そうすれば、ID が正しいことを確認し、Hibernate がその製品を見つけることができます。

他のコメンターが示唆したように、生成された SQL を見始める必要があることに失敗しました。

于 2010-03-30T09:36:11.803 に答える