我正在使用Hibernate Criteria从filename表的列中获取值contaque_recording_log。
Criteria
filename
contaque_recording_log
但是当我得到结果时,它会引发异常
org.hibernate.QueryException:无法解析属性:com.contaque.hibernateTableMappings.contaque_recording_log的文件名
我的食用豆是:
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; } }
我从那里获取hibernate-session的hibernateUtil类:
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(); } }
我从表中获取数据的方法:
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; }
如果我打印criteria.toString(),则O / P为:
criteria.toString()
CriteriaImpl(com.contaque.hibernateTableMappings.contaque_recording_log:this[][campname=spice, disposition=WN]filename)
我在哪里出错,如何从表格中获取数据?
hibernate查询的属性名称区分大小写(因为它们最终依赖于上的getter / setter方法@Entity)。
@Entity
确保参考fileNameCriteria查询中的属性,而不是filename。
fileName
具体来说,Hibernate filename在执行该Criteria查询时将调用该属性的getter方法,因此它将查找名为的方法getFilename()。但是该属性被称为FileNamegetter getFileName()。
getFilename()
FileName
getFileName()
因此,如下更改投影:
criteria.setProjection(Projections.property("fileName"));