Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java hibernate could not resolve property

Tags:

java

hibernate

I am trying to do a simple select count statement from a method which works on my other part of program but here it gives me error.

 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;

}

The Error message:

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]

I have no idea why this does not work

like image 490
user1217609 Avatar asked Mar 14 '12 17:03

user1217609


2 Answers

You do not have persistent attribute (field) SOURCENAME in SlaveSubscribers entity. Most likely SOURCENAME is name of the database column. In HQL you need to use name of the field (case sensitive).

like image 166
Mikko Maunu Avatar answered Oct 06 '22 11:10

Mikko Maunu


Just to clarify the above answer, because I would hate for anyone to miss it.

Hibernate uses the variable property in the class for the query, not the column name in the database.

As a result if you have a model class like this:

private Long studentId;

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

You will have to do a query on studentId not studentid.

like image 27
Aelexe Avatar answered Oct 06 '22 12:10

Aelexe