Ich werde versuchen, Sie anhand eines Beispiels verständlich zu machen. Angenommen, Sie hatten eine relationale Tabelle (STUDENT) mit zwei Spalten und ID (int) und NAME (String). Als ORM hätten Sie eine Entitätsklasse wie folgt erstellt: -
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;
}
}
Nehmen wir an, die Tabelle hatte bereits Einträge. Wenn jemand Sie fragt, fügen Sie eine weitere Spalte von "AGE" (int) hinzu.
ALTER TABLE STUDENT ADD AGE int NULL
Sie müssen Standardwerte als NULL festlegen, um eine weitere Spalte in eine vorgefüllte Tabelle einzufügen. Dadurch können Sie der Klasse ein weiteres Feld hinzufügen. Nun stellt sich die Frage, ob Sie einen primitiven Datentyp oder einen nicht primitiven Wrapper-Datentyp zum Deklarieren des Felds verwenden.
@Column(name = "AGE")
private int age;
oder
@Column(name = "AGE")
private INTEGER age;
Sie müssen das Feld als nicht primitiven Wrapper-Datentyp deklarieren, da der Container versucht, die Tabelle der Entität zuzuordnen. Daher kann es keine NULL-Werte zuordnen (Standard), wenn Sie das Feld nicht als Wrapper deklarieren und schließlich die Ausnahme "Nullwert wurde einer Eigenschaft des primitiven Typensetzers zugewiesen" auslösen.