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">

Была аналогичная проблема, но затем она была решена путем изменения параметров/аргументов в запросе, которые не были правильно сопоставлены. Я использовал ссылочную таблицу в запросе, и проблема заключалась в том, что параметр, на который он ссылался через запрос, был недействительным. Итак, после исправления того же, это сработало.

Другие вопросы по тегам