冬眠基準 - エイリアス
-
23-09-2019 - |
質問
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注文が返され続けますが、私は自分が間違っていることを実際には見ていません。
ありがとう!
解決
クエリは私には大丈夫に見えます...「hibernate.show_sql」を「true」に設定してみてください。実際にSystem.outまたは/およびlog4j.logger.org.hibernate.sql = debug、logit it outまたはlog it log in the system.outで表示できます。 sql_appender
@larsはい、できます。 基準API-アソシエーションエイリアスは、フルネーム/パスcarcriteria.createalias( "car_parts.wheels"、 "wheels")のほんの一部です。
他のヒント
列ではないものにエイリアスを使用できるかどうかはわかりません。つまり、 @Column
また @JoinColumn
- 解釈。
それは正しいようです。
DAOセクションでは、既に「C」という名前の変数があります。これが初期化されているコードを投稿できますか?これは、Order.classで元の基準を作成していることを再確認するためだけです。
次に、次のことを確認して、次のIDで製品を再生できるかどうかを確認してください。
Product p = (Product)session.load(Product.class, productId)
そうすれば、IDが正しく、Hibernateがその製品を見つけることができることを確認しています。
他のコメンターが示唆しているように、生成されたSQLを検討し始める必要があることに失敗しました。