예를 들어 이해하도록 노력하겠습니다. 두 개의 열과 ID (int) 및 NAME (String)이있는 관계형 테이블 (STUDENT)이 있다고 가정하십시오. 이제 ORM으로 다음과 같은 엔티티 클래스를 만들었습니다.
package com.kashyap.default;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author vaibhav.kashyap
*
*/
@Entity
@Table(name = "STUDENT")
public class Student implements Serializable {
/**
*
*/
private static final long serialVersionUID = -1354919370115428781L;
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "NAME")
private String name;
public Student(){
}
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;
}
}
테이블에 이미 항목이 있다고 가정합니다. 이제 누군가 "AGE"(int)의 다른 열을 추가하라고 요청하면
ALTER TABLE 학생 추가 연령 int NULL
미리 채워진 테이블에 다른 열을 추가하려면 기본값을 NULL로 설정해야합니다. 이렇게하면 클래스에 다른 필드를 추가 할 수 있습니다. 이제 필드를 선언하기 위해 기본 데이터 유형을 사용할지 또는 기본이 아닌 래퍼 데이터 유형을 사용할 지에 대한 질문이 발생합니다.
@Column(name = "AGE")
private int age;
또는
@Column(name = "AGE")
private INTEGER age;
컨테이너가 테이블을 엔터티와 매핑하려고하기 때문에 필드를 기본이 아닌 래퍼 데이터 유형으로 선언해야합니다. 따라서 필드를 래퍼로 선언하지 않고 결국 "기본 유형 setter의 속성에 Null 값이 할당되었습니다"예외를 throw하면 NULL 값 (기본값)을 매핑 할 수 없습니다.