org.hibernate.QueryException: 无法解析属性: filename

41

我正在使用Hibernate的Criteria来获取表格contaque_recording_log中的filename列的值。

但是在获取结果时,它会抛出一个异常:

org.hibernate.QueryException: could not resolve property: filename of: com.contaque.hibernateTableMappings.contaque_recording_log

我的表格bean是:

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(),输出结果是:

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

我哪里错了,如何从我的表中获取数据?

3个回答

87

Hibernate查询在属性名称上区分大小写(因为它们最终依赖于上的getter/setter方法)。

确保在Criteria查询中将属性称为fileName,而不是filename

具体来说,当执行该Criteria查询时,Hibernate将调用filename属性的getter方法,因此它将寻找名为getFilename()的方法。但是该属性称为FileName,其getter为getFileName()

因此,请像这样更改投影:

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

4
遇到了这个问题。我的表中有一个名为fk_mycolumn的列,我使用name="fk_mycolumn"进行了映射,但在我的DAO中,我试图查询它时使用了大写字母"C"的fk_myColumn - George
2
我遇到了同样的问题,问题是getter和setter都缺失了!! - Cjo
1
这帮助我找出了一个排序问题 - 属性名称为空。谢谢! - andrzej.szmukala

0

对我来说,错误是因为我在向后端传递Pageable时传递了错误的值。原因是在Angular的.html文件中matSortActive属性的名称不正确。

<mat-table matSort matSortDisableClear matSortDirection="asc" matSortActive="name" [dataSource]="this.dataSource">

0

我有类似的问题,但是通过更改查询中未正确映射的参数/参数解决了它。我在查询中使用了引用表,问题在于查询引用的参数是无效的。因此,在纠正相同的内容后,它可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接