2015-06-14 135 views
1

我有一個類DocMovement這樣的:休眠 - org.hibernate.QueryException:無法解析屬性:

@Entity 
    @Table(name = "DOC_MVMNT") 
    public class DocMovement {   
     @Id 
     @GeneratedValue 
     @Column(name = "MVMNT_ID") 
     private int mvmnt_id; 

     @ManyToOne 
     @JoinColumn(name = "BARCODE") 
     public DocMaster docMaster; 
    // other fields and getters setters 
    } 

的DocMaster類是這樣的:

@Entity 
@Table(name="DOC_MASTER") 
public class DocMaster {  
    @Id 
    @NotNull 
    @Column(name = "BARCODE") 
    private String barcode; 

    @Column(name = "DOC_NO") 
    private String docNo ; 

    @Column(name="DOC_TYPE") 
    private String docType; 

    @Column(name="STATUS") 
    private String status; 
// other fields and getters setters 
} 

當我試圖運行下面的代碼:

Criteria criteria = session.createCriteria(DocMovement.class,"documentMovement"); 
     criteria.add(Restrictions.eq("documentMovement.recipientDetail.empId", empId)); 
     criteria.add(Restrictions.eq("documentMovement.isCurrent", true)); 
     criteria.add(Restrictions.ne("documentMovement.docMaster.status",FMSConstants.CLOSED_STATUS)); 
     criteria.add(Restrictions.ne("documentMovement.docMaster.status",FMSConstants.DISPOSED_STATUS)); 
     List<DocMovement> documentsHeld = (List<DocMovement>) criteria.list(); 

然後我得到以下異常:

[org.hibernate.QueryException: could not resolve property: 
docMaster.status of: com.fms.persistence.DocMovement] with root cause 
org.hibernate.QueryException: could not resolve property: 
docMaster.status of: com.fms.persistence.DocMovement 

還有其他情況下,我嘗試使用如上所示的條件進行查詢,查詢運行良好,但我無法理解我在這種情況下做錯了什麼。我也嘗試過使用eager fetch,之前我沒有使用別名,所以我嘗試使用別名。

請幫我解決問題!!!

回答

4

嘗試增加別名:

criteria.createAlias("documentMovement.docMaster", "docMaster") 

,過一會兒給

criteria.add(Restrictions.ne("docMaster.status",FMSConstants.CLOSED_STATUS)); 
+0

這工作,Thanx洛特,但我不明白爲什麼,因爲我沒有按照你在其他情況下建議,但它工作正常。爲什麼在這種情況下,我不得不給別名。 –

2

您必須添加一個別名docMaster第一

+0

bu t recipientDetail也是另一個類UserDetails的一個對象,並且我在回憶它的字段是相同的,爲什麼hibernate沒有爲此拋出異常。 –

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 –

+0

@FurquanAhmed你說得對,你可能需要一個。注意有時候Hibernate會「向後」分析東西(它基本上構建了一個解析堆棧)。 – Taylor

1

我認爲這是與不正確的枚舉的comparaison。你正試圖比較一個字符串的枚舉。此行似乎是錯誤的:

criteria.add(Restrictions.ne("documentMovement.docMaster.status",FMSConstants.CLOSED_STATUS));

由於documentMovement.docMaster.status被定義爲一個字符串,也許嘗試:

criteria.add(Restrictions.ne("documentMovement.docMaster.status",FMSConstants.CLOSED_STATUS.toString())); 
criteria.add(Restrictions.ne("documentMovement.docMaster.status",FMSConstants.DISPOSED_STATUS.toString())); 
相關問題