2012-03-14 43 views
6

我想從一個方法中做一個簡單的選擇計數語句,該方法適用於我的另一部分程序,但在這裏它給了我錯誤。java hibernate無法解析屬性

public Long validateSub(String source, String tbl){ 
    Session session = HibernateUtil.getSessionFactory().openSession(); 
    session.beginTransaction(); 


    Query q = session.createQuery("SELECT count(s) from SlaveSubscribers s where s.SOURCENAME = :sourcename AND s.TBL = :tbl"); 
    q.setParameter("sourcename", source); 
    q.setParameter("tbl", tbl); 

    Long result = (Long) q.list().get(0); 
    session.getTransaction().commit(); 

    return result; 

} 

錯誤消息:

Exception in thread "Thread-3" org.hibernate.QueryException: could not resolve property: SOURCENAME of: com.datadistributor.main.SlaveSubscribers [SELECT count(s) from com.datadistributor.main.SlaveSubscribers s where s.SOURCENAME = :sourcename AND s.TBL = :tbl] 

我不知道爲什麼這不起作用

+0

請發佈一個提取您的類SlaveSubscribers(成員聲明和getter/setter for sourcename)和該類的hibernate映射文件(如果存在)。錯誤必須在那裏。 – Johanna 2012-03-15 07:54:52

回答

5

您不必在SlaveSubscribers實體持久屬性(場)SOURCENAME。最有可能的SOURCENAME是數據庫列的名稱。在HQL中,您需要使用該字段的名稱(區分大小寫)。

6

只是爲了澄清上述答案,因爲我會恨任何人錯過它。

Hibernate在類中使用查詢的變量屬性,而不是數據庫中的列名。

因此,如果你有這樣的模型類:

private Long studentId; 

@Id 
@GeneratedValue 
@Column(name="studentid") 
public Long getStudentId() 
{ 
    return studentId; 
} 

你必須做一個查詢上studentId沒有studentid

+0

偉大的筆記,這幫了我很多。我想補充說的是,在類中定義的變量的情況並不重要。例如,你也可以將類中的Long變量定義爲'studentid'而不是'studentId',只要getter具有'I'大寫,你仍然需要將'I'大寫你的查詢也是如此。 – 2017-01-04 22:04:09

相關問題