休眠列别名用作实际列名吗?

时间:2020-02-24 17:39:10

标签: java hibernate

正在处理一个项目,在该项目中我需要与db接口并检索各种列。当我尝试从数据库查询时,Hibernate创建的别名与数据库的实际列名不匹配。因此,我得到一个java.sql.SQLException: Column not found异常。

映射的类:

package com.ots.Models;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name="My_Table")
public class MyRecord {

    @EmbeddedId
    private RecordId id;

    @Column(name="FILE_NAME")
    private String File_Name;

    @Column(name="KEY")
    private String key;

    @Column(name="MET_TYPE")
    private String met_type;

    @Column(name="DSHARED")
    private String dShared;

    @Column(name="SER")
    private String ser;

    @Column(name="SERVI")
    private int servi;

    @Column(name="DESCRIPTION")
    private String description;

    public MyRecord(RecordId id, String File_Name, String key, String met_type,
            String dShared, String ser, int servi, String description) {
        this.id = id;
        File_Name = File_Name;
        this.key = key;
        this.met_type = met_type;
        this.dShared = dShared;
        this.ser = ser;
        this.servi = servi;
        this.description = description;
    }



    public RecordId getId() {
        return id;
    }

    public void setId(RecordId id) {
        this.id = id;
    }

    public String File_Name() {
        return File_Name;
    }

    public void setFile_Name(String File_Name) {
        File_Name = File_Name;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getMet_type() {
        return metric_type;
    }

    public void setMet_type(String met_type) {
        this.metric_type = metric_type;
    }

    public String getDShared() {
        return dShared;
    }

    public void setDShared(String dShared) {
        this.dShared = dShared;
    }

    public String getService_cat_no() {
        return service_cat_no;
    }

    public void setSer(String ser) {
        this.ser = ser;
    }

    public int getServi() {
        return servi;
    }

    public void setServi(int servi) {
        this.servi= servi;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }




}

呼叫班级:

@Controller
@RequestMapping("/history")
public class MyTable {

    @SuppressWarnings("unchecked")
    @GetMapping("/load")
    public String loadData(Model theModel) {

        //Get all records out of the table from Hibernate

        Session newSession = Statics.getSessionFactory().openSession();
        newSession.beginTransaction();


        //load all data from the Historical table

        String hqlQuery = "from MyRecord";

        Session session = Statics.getSessionFactory().openSession();

        Query<CrossReferenceRecord> query = session.createQuery(hqlQuery);

        List<CrossReferenceRecord> crossReferenceList = query.getResultList();

        theModel.addAttribute("crossReferenceList", crossReferenceList);

        return "CrossReferenceView";


    }

}

数据库架构:

int id, VarChar(20) File_Name, VarChar(20) key, VarChar(20) met_type, VarChar(20) dShared, VarChar(20) ser, int servi, VarChar(20) description

完整错误:

Hibernate: select crossrefer0_.FILE_NAME as FIL_BUI3_0_, ... java.sql.SQLException: Column not found: FIL_BUI3_0_

这似乎是一个奇怪的问题-我希望Hibernate不需要这种配置。

我们如何处理此问题?

1 个答案:

答案 0 :(得分:0)

我不确定这是否是确切的问题,但是您的查询是从MyRecord中选择的,它是类的名称,而不是表的名称。我想您想从My_Table查询。同样,在调用createQuerygetResultList时,是否要将这些结果保存到MyRecord类中?