org.hibernate.QueryException: не удалось разрешить свойство: имя файла
Я использую Hibernate 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;
}
}
Мой класс hibernateUtil, откуда я получаю hibernate-сеанс:
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 это:
CriteriaImpl(com.contaque.hibernateTableMappings.contaque_recording_log:this[][campname=spice, disposition=WN]filename)
где я иду не так, как я могу получить данные из моей таблицы?
3 ответа
Запросы Hibernate чувствительны к регистру с именами свойств (потому что они в конечном итоге полагаются на методы getter/setter на @Entity
).
Убедитесь, что вы ссылаетесь на собственность как fileName
в запросе Criteria, а не filename
,
В частности, Hibernate вызовет метод получения filename
свойство при выполнении запроса Criteria, поэтому он будет искать метод с именем getFilename()
, Но свойство называется FileName
и добытчик getFileName()
,
Итак, измените проекцию так:
criteria.setProjection(Projections.property("fileName"));
Для меня ошибка произошла из-за того, что я передавал неправильное значение в Pageable для бэкэнда. Причиной было неправильное названиеmatSortActive
свойство в Angular.html
файл.
<mat-table matSort matSortDisableClear matSortDirection="asc" matSortActive="name" [dataSource]="this.dataSource">
Была аналогичная проблема, но затем она была решена путем изменения параметров/аргументов в запросе, которые не были правильно сопоставлены. Я использовал ссылочную таблицу в запросе, и проблема заключалась в том, что параметр, на который он ссылался через запрос, был недействительным. Итак, после исправления того же, это сработало.