Ankit Lamba Ankit Lamba -3 years ago 232
Java Question

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

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?

Answer Source

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"));
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download