Я спробую змусити вас зрозуміти за допомогою прикладу. Припустимо, у вас була реляційна таблиця (STUDENT) з двома стовпцями та ідентифікаторами (int) та NAME (String). Тепер як 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)
АЛЬТЕР СТУДЕНТ СТОЛОК ДОДАТИ ВІРНІСТЬ in NULL
Вам доведеться встановити значення за замовчуванням як NULL, щоб додати ще один стовпець у попередньо заповнену таблицю. Це змушує вас додати ще одне поле у класі. Тепер виникає питання, чи використовуватимете ви примітивний тип даних або непримітивний тип даних для обгортки для оголошення поля.
@Column(name = "AGE")
private int age;
або
@Column(name = "AGE")
private INTEGER age;
вам доведеться оголосити поле непримітивним типом даних для обгортки, оскільки контейнер буде намагатися зіставити таблицю з сутністю. Таким чином, він не зможе відобразити значення NULL (за замовчуванням), якщо ви не оголосите поле оберткою і в кінцевому підсумку викинете "Null value було присвоєно властивості примітивної задачі типу" Виняток.