user1217609
user1217609

Reputation: 253

java hibernate could not resolve property

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

Upvotes: 12

Views: 34076

Answers (2)

Aelexe
Aelexe

Reputation: 1226

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.

Upvotes: 18

Mikko Maunu
Mikko Maunu

Reputation: 42074

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).

Upvotes: 8

Related Questions