Unknown column in 'field list'. Hibernate

Есть 2 таблицы в mysql: Student(id, name, marks, comp_id) и Computer(cid, name). Программа должна сохранить Компьютеры и Студента в базу данных. Вот код:

Класс Student:

@Entity
public class Student {
    
    @Id
    private int id;
    private String name;
    private int marks;
    
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "comp_id")
    private List<Computer> computers;
    
    
    public Student(int id, String name, int marks) {
        this.id = id;
        this.name = name;
        this.marks = marks;
    }


    public int getId() {
        return id;
    }


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


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public int getMarks() {
        return marks;
    }


    public void setMarks(int marks) {
        this.marks = marks;
    }
    
    public void setComputers(List<Computer> computers) {
        this.computers = computers;
    }
    
    public List<Computer> getComputer() {
        return computers;
    }

}

Класс Computer:

@Entity
public class Computer {
    
    @Id
    private int cid;
    private String cname;
    
    
    public Computer(int cid, String cname) {
        this.cid = cid;
        this.cname = cname;
    }

    public int getCid() {
        return cid;
    }

    public void setCid(int cid) {
        this.cid = cid;
    }

    public String getName() {
        return cname;
    }

    public void setName(String name) {
        this.cname = name;
    }
}

Класс App:

public class App 
{
    public static void main( String[] args ) throws SQLException {
        
        StudentDAOImpl studService = new StudentDAOImpl();
        Computer comp = new Computer(215, "Asus");
        Student stud = new Student(8, "Karl", 90);
        List<Computer> comps = new ArrayList<Computer>();
        comps.add(comp);
        stud.setComputers(comps);
        studService.save(stud);
    }
}

При выполнении программы выполняются следующие запросы и возникает ошибка:

Hibernate: insert into Student (marks, name, id) values (?, ?, ?)
Hibernate: insert into Computer (cname, cid) values (?, ?)
Hibernate: update Computer set comp_id=? where cid=?

Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'comp_id' in 'field list'

По какой-то причине программа ищет поле comp_id в таблице Computer, а не Student. Если использовать @OneToOne вместо @OneToMany, то все нормально работает. Помогите исправить данную ошибку.


Ответы (1 шт):

Автор решения: Vitaliy M.V.

Аннотация @JoinColumn указывает обязательную связь полей в конструкторах классов, при этом у вас нет поля @JoinColumn(name = "comp_id") в классе Computer и соответственно поля comp_id в одной из таблиц. В однонаправленных отношениях @OneToOne указывает JPA, что только одна из сторон является владельцем запросов и несёт ответственность за обновление связанных полей.

Связанные сущности в Hibernate

→ Ссылка