21

Я использую Hibernate Criteria для получения значений из столбца filename в моей таблице contaque_recording_log.org.hibernate.QueryException: не удалось разрешить свойство: filename

Но когда я получаю результат, он бросает исключение

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 откуда я получаю спящую-сессию:

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(), О/Р это:

CriteriaImpl(com.contaque.hibernateTableMappings.contaque_recording_log:this[][campname=spice, disposition=WN]filename) 

, где я ошибаюсь, как мне получить данные из таблицы?

ответ

51

Запросы в спящем режиме чувствительны к регистру с именами свойств (потому что они в конечном итоге полагаются на методы getter/setter на @Entity).

Удостоверьтесь, что вы ссылаетесь на имущество как fileName в запросе критериев, а не filename.

В частности, Hibernate вызовет метод getter свойства filename при выполнении этого запроса Criteria, поэтому он будет искать метод, называемый getFilename(). Но свойство называется FileName и геттером getFileName().

Таким образом, изменить проекцию так:

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

Если бы эту проблему. У MY table был столбец с именем 'fk_mycolumn', я сопоставил его с помощью' name = "fk_mycolumn" ', но в моем DAO я пытался запросить его' fk_myColumn', с верхним регистром «C». – George

+1

У меня была такая же проблема, и проблема была как у гейтера, так и у сеттера отсутствовала !! – Cjo

Смежные вопросы