2012-03-14 16 views
6

私はプログラムの他の部分で動作するメソッドから単純なselect countステートメントを実行しようとしていますが、ここでエラーが出ます。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(メンバー宣言とstercenameのgetter/setter)とこのクラスのハイバーネーションマッピングファイル(存在する場合)を抽出して投稿してください。エラーはそこになければなりません。 – Johanna

答えて

5

あなたはSlaveSubscribersエンティティにおける永続属性(フィールド)sourcenameここを持っていない動作しない理由はわかりません。ほとんどの場合、SOURCENAMEはデータベース列の名前です。 HQLでは、フィールドの名前を使用する必要があります(大文字と小文字は区別されます)。

6

私は誰もがそれを見逃すことを嫌うので、ちょうど上記の答えを明らかにする。

Hibernateは、データベースの列名ではなく、クエリのクラスでvariableプロパティを使用します。その結果、

あなたは、このようなモデルクラスがある場合:

private Long studentId; 

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

をあなたがにクエリを実行する必要がありますがないstudentidをstudentId。

+0

すごく助かりました。クラスに定義されている変数の大文字小文字が問題ではないことを追加したいと思います。例えば、クラスの 'Long'変数を' studentId'の代わりに 'studentid'と定義し、ゲッターが' I'を大文字にしていれば、 'I'を大文字にする必要がありますあなたの質問も。 –

関連する問題