Intentaré hacerte entender con la ayuda de un ejemplo. Suponga que tiene una tabla relacional (ESTUDIANTE) con dos columnas e ID (int) y NAME (String). Ahora, como ORM, habría creado una clase de entidad similar a la siguiente:
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;
}
}
Supongamos que la tabla ya tenía entradas. Ahora, si alguien te pregunta, agrega otra columna de "EDAD" (int)
ALTER TABLE ESTUDIANTE AÑADIR EDAD int NULL
Deberá establecer los valores predeterminados como NULL para agregar otra columna en una tabla precargada. Esto te hace agregar otro campo en la clase. Ahora surge la pregunta de si utilizará un tipo de datos primitivo o un tipo de datos contenedor no primitivo para declarar el campo.
@Column(name = "AGE")
private int age;
o
@Column(name = "AGE")
private INTEGER age;
tendrá que declarar el campo como un tipo de datos contenedor no primitivo porque el contenedor intentará mapear la tabla con la entidad. Por lo tanto, no podría mapear valores NULL (predeterminado) si no declara el campo como envoltorio y eventualmente arrojaría "Se asignó un valor nulo a una propiedad del establecedor de tipo primitivo" Excepción.