org.hibernate.QueryException: could not resolve property: filename

hibernate, hibernate-criteria, hibernateexception, java, oracle-sqldeveloper

Solution

Hibernate queries are case sensitive with property names (because they end up relying on getter/setter methods on the `@Entity`).

Make sure you refer to the property as `fileName` in the Criteria query, not `filename`.

Specifically, Hibernate will call the getter method of the `filename` property when executing that Criteria query, so it will look for a method called `getFilename()`. But the property is called `FileName` and the getter `getFileName()`.

So, change the projection like so:

criteria.setProjection(Projections.property("fileName"));

Problem

I am using Hibernate `Criteria` to get values from column `filename` in my table `contaque_recording_log`. But when I'm getting the result, it throws an exception org.hibernate.QueryException: could not resolve property: filename of: com.contaque.hibernateTableMappings.contaque_recording_log My table bean is: ``` import java.util.Date; import javax.persistence.*; @Entity @Table(name="contaque_recording_log") public class contaque_recording_log implements java.io.Serializable{ private static final long serialVersionUID = 1111222233334404L; @Id @Column(name="logId", insertable=true, updatable=true, unique=false) private Integer logId; @Column(name="userName", insertable=true, updatable=true, unique=false) private String userName; @Column(name="ext", insertable=true, updatable=true, unique=false) private String ext; @Column(name="phoneNumber", insertable=true, updatable=true, unique=false) private String phoneNumber; @Column(name="callerId", insertable=true, updatable=true, unique=false) private String callerId; @Column(name="fileName", insertable=true, updatable=true, unique=false) private String fileName; @Column(name="campName", insertable=true, updatable=true, unique=false) private String campName; @Temporal(javax.persistence.TemporalType.TIMESTAMP) @Column(name="eventDate", insertable=true, updatable=true, unique=false) private Date eventDate; @Column(name="disposition", insertable=true, updatable=true, unique=false) private String disposition; @Column(name="duration", insertable=true, updatable=true, unique=false) private String duration; @Column(name="calltype", insertable=true, updatable=true, unique=false) private String calltype; public Date getEventDate() { return eventDate; } public void setEventDate(Date eventDate) { this.eventDate = eventDate; } public String getCallerId() { return callerId; } public void setCallerId(String callerId) { this.callerId = callerId; } public String getExt() { return ext; } public void setExt(String ext) { this.ext = ext; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Integer getLogId() { return logId; } public void setLogId(Integer logId) { this.logId = logId; } public String getCampName() { return campName; } public void setCampName(String campName) { this.campName = campName; } public String getDisposition() { return disposition; } public void setDisposition(String disposition) { this.disposition = disposition; } public String getDuration() { return duration; } public void setDuration(String duration) { this.duration = duration; } public String getCalltype() { return calltype; } public void setCalltype(String calltype) { this.calltype = calltype; } } ``` MY hibernateUtil class from where I'm getting hibernate-session: ``` public enum HibernateUtilSpice { INSTANCE; public static SessionFactory sessionFactory = null; private synchronized SessionFactory getSessionFactory(){ if(sessionFactory == null){ Configuration config = new Configuration(); config.addAnnotatedClass(contaque_recording_log.class); config.addAnnotatedClass(contaque_servers.class); config.configure(); //get the properties from Hibernate configuration file Properties configProperties = config.getProperties(); ServiceRegistryBuilder serviceRegisteryBuilder = new ServiceRegistryBuilder(); ServiceRegistry serviceRegistry = serviceRegisteryBuilder.applySettings(configProperties).buildServiceRegistry(); sessionFactory = config.buildSessionFactory(serviceRegistry); } return sessionFactory; } public Session getSession(){ return getSessionFactory().openSession(); } } ``` My method where I'm getting the data from table: ``` public String getFileName() { try{ hibernateSession = HibernateUtilSpice.INSTANCE.getSession(); Criteria criteria = hibernateSession.createCriteria(contaque_recording_log.class); criteria.add(Restrictions.eq("campname", "spice")); criteria.add(Restrictions.eq("disposition", "WN")); criteria.setProjection(Projections.property("filename")); List list = criteria.list(); for (Object object : list) { System.out.println("List obj: " + object); } } catch (Exception e){ e.printStackTrace(); } finally { hibernateSession.flush(); hibernateSession.close(); } return filename; } ``` If I print the `criteria.toString()`, the O/P is: ``` CriteriaImpl(com.contaque.hibernateTableMappings.contaque_recording_log:this[][campname=spice, disposition=WN]filename) ``` where am I going wrong, how do I get the data from my Table?

Original source