2012-03-14 10 views
6

Sto provando a fare una semplice istruzione select count da un metodo che funziona sull'altra parte del programma ma qui mi dà errore.java hibernate non ha potuto risolvere la proprietà

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; 

} 

il messaggio di errore:

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] 

Non ho idea del perché questo non funziona

+0

Si prega di inviare un estratto della classe SlaveSubscribers (dichiarazione membro e getter/setter per nomefile) e il file di mapping di ibernazione per questa classe (se esiste). L'errore deve essere lì. – Johanna

risposta

5

Non hai attributo persistente (campo) SourceName in SlaveSubscribers entità. Molto probabilmente SOURCENAME è il nome della colonna del database. In HQL è necessario utilizzare il nome del campo (maiuscole e minuscole).

6

Giusto per chiarire la risposta di cui sopra, perché mi dispiacerebbe che nessuno lo perdesse.

Hibernate utilizza la proprietà variabile nella classe per la query, non il nome della colonna nel database.

Di conseguenza, se si dispone di una classe modello come questo:

private Long studentId; 

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

Si dovrà fare una query su StudentID non StudentID.

+0

Grande nota, questo mi ha aiutato molto. Vorrei aggiungere che il caso della variabile così come è definito nella classe non ha importanza. Ad esempio, potresti anche aver definito la variabile 'Long' nella classe come' studentid' invece di 'studentId', e fintanto che il getter ha avuto la' I' maiuscola, avresti ancora bisogno di capitalizzare la 'I' in la tua domanda, pure. –

Problemi correlati