Псевдоним столбца Hibernate используется в качестве фактического имени столбца? - PullRequest
0 голосов
/ 24 февраля 2020

Работа над проектом, в котором мне нужно взаимодействовать с БД и извлекать различные столбцы. Когда я пытаюсь выполнить запрос из базы данных, 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 голосов
/ 24 февраля 2020

Я не уверен, что это именно та проблема, но ваш запрос выбирает из MyRecord, которое является именем класса, а не именем таблицы. Я думаю, вы захотите запросить от My_Table. Также при вызове createQuery и getResultList хотите ли вы сохранить эти результаты в классе MyRecord?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...