2010-03-30 49 views
1

我在Hibernate中使用別名的概念掙扎了一下。
我的情況是這樣的:
訂購休眠標準 - 別名

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

的OrderDetail

@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)); 

所以我WA nt搜索包含產品的每個訂單。
但是,使用這個查詢,它一直返回0個命令,我並不真正看到我做錯了什麼。
謝謝!

+0

打開SQL日誌記錄(在hibernate.properties中設置'hibernate.show_sql = true')並查看生成的查詢。然後把它們展示給我們。 – 2010-03-30 08:08:24

回答

1

的查詢看起來還好我... 嘗試設置「hibernate.show_sql」爲「true」,所以你其實可以看到SQL中的System.out 或/和記錄它log4j.logger.org。 hibernate.SQL = DEBUG,SQL_APPENDER

@lars是的,你可以。 Criteria API - Associations 別名只是一個全名/路徑 carCriteria.createAlias(「car_parts.wheels」,「車輪」)

+0

當我開始篩選某些部分以查看錯誤的位置時,我發現在影響結果的其他部分中出現錯誤。 非常感謝:-) – Ignace 2010-03-30 14:28:29

0

我不確定你可以使用別名不是列的東西,即沒有@Column@JoinColumn -annotation。

0

這看起來正確的短名稱。

在您的DAO部分,您已經有一個名爲'c'的變量 - 您可以在代碼初始化的位置發佈代碼嗎?這只是爲了仔細檢查你是否正在用Order.class創建原始標準。

那麼接下來的事情,以檢查是否可以與下面的那個ID retreive產品:

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

這樣,你正在檢查該ID是正確和Hibernate能找到該產品。

因爲其他評論者的建議,我們不得不開始查看生成的SQL。