2012-03-14 17 views
6

Estoy tratando de hacer una simple declaración de conteo selecto de un método que funciona en mi otra parte del programa pero aquí me da un error.java hibernate no pudo resolver la propiedad

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; 

} 

El mensaje de error:

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] 

no tengo ni idea de por qué esto no funciona

+0

Por favor, publique un extracto de su clase SlaveSubscribers (declaración de miembro y getter/setter para sourcename) y el archivo de mapeo de hibernación para esta clase (si existe). El error debe estar ahí. – Johanna

Respuesta

5

Usted no tiene atributo persistente nomFuente (campo) en la entidad SlaveSubscribers. Lo más probable es SOURCENAME es el nombre de la columna de la base de datos. En HQL debe usar el nombre del campo (distingue entre mayúsculas y minúsculas).

6

Solo para aclarar la respuesta anterior, porque odiaría que alguien se lo pierda.

Hibernate utiliza la propiedad variable en la clase para la consulta, no el nombre de la columna en la base de datos.

Como resultado, si usted tiene una clase de modelo así:

private Long studentId; 

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

Usted tendrá que hacer una consulta en studentID no studentID.

+0

Nota importante, esto me ayudó mucho. Me gustaría agregar que el caso de la variable como se define en la clase no importa. Por ejemplo, también podría haber definido la variable 'Long' en la clase como' studentid' en lugar de 'studentId', y siempre que el getter tuviera el' I' en mayúscula, aún necesitaría mayúscula el 'I' en su consulta, también. –

Cuestiones relacionadas