2011-01-25 103 views
0

有什麼辦法爲組件創建「別名」?
我有一個「標準生成器」,它以「Address.City」(或「User.Address.City」,...)的格式輸入字符串,並基於它創建一個ICriteria(過濾器和排序)。
我正在使用組件映射「地址」類,因此它與「用戶」保持在同一個表中。NHibernate組件映射(創建標準)

我得到的例外是:
NHibernate.QueryExceptioncould無法解決財產:城市:如果我試圖不創建地址組成部分的「別名」 MyNamespace.User

,它工作得很好。
但是,由於它是一個標準生成器,是否有一種方法可以檢測到「地址」是一個組件並且避免了調用條件。創建草案(「地址」)?任何工作?

This與我的問題相同,但解決方案對我來說不可行(我沒有爲每個查詢手動創建標準)。

任何幫助將不勝感激!

+0

你可以發佈一些你的代碼嗎? – Vadim 2011-01-25 15:23:30

+0

@Yads - 我現在其實沒有任何代碼。它應該很簡單,因爲「用戶」類通過屬性引用「地址」類。在用戶映射中,我將「Address」作爲組件。請查看https://forum.hibernate.org/viewtopic.php?p=2335410&sid=37a2a95223e929ae6cccfc183af6af28,因爲它與我的問題非常相似。謝謝! – Frederico 2011-01-25 15:41:50

回答

1

您不能創建地址的別名,因爲地址不是映射的實體。 CreateAliasCreateCriteria之間的唯一區別是前者返回原始標準,而後者返回新的子標準。因此,您可以創建Criteria的唯一類是已映射的類。由於組件不是映射類,因此無法在它們周圍創建標準。

我唯一的建議是讓您的Address類實現一個空的描述符接口,如IComponent或用自定義的ComponentAttribute標記它。然後你的CriteriaBuilder可以檢查它創建一個標準的類是否有這個元數據並且忽略它。