개발/Spring
[Spring-Hibernate] cretaeQuery, is not mapped 에러
지산동고라니
2021. 11. 6. 14:16
Hibernate의 경우 SQL query의 대소문자를 실제 Entiry의 Class이름과 필드 이름을 정확히 맞춰줘야 한다.
만약 다음과 같은 Enrity가 있다고 하자.
package com.ukhyun.hibernate.demo.entity;
import javax.persistence.*;
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // Auto increment
@Column(name = "id")
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
public Student() {
}
public Student(String firstName, String lastName, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
'}';
}
}
그리고 만약 다음과 같은 쿼리를 작성하고 싶다면..
SELECT * FROM STUDENT WHERE LAST_NAME = 'LASTNAME';
List<Student> students = session.createQuery("from Student where lastName='LASTNAME').getResultList()
// 테이블 이름은 현재 만들어 놓은 클래스 이름과 같게 Student
// 필드 역시도 클래스 내의 필드와 같이 lastName 으로 해줘야함.
로 작성하면 된다.