Friday 25 November 2011

Basic JPA annotations

The simplest entity bean:

@Entity
public class Student {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
    
    private String name;
    
}

The table “STUDENT” generated:


Specify table name, column name, nullable, length and unique:

@Entity
@Table(name="T_STUDENT")
public class Student {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="STU_ID")
    private int id;
    
    @Column(name="STU_NAME", nullable=false, 
            unique=true, length=30)
    private String name;    
}


Constraints:

CREATE UNIQUE INDEX SQL110902022422451 ON T_STUDENT(STU_NAME);

ColumnDefinition overwrites length

@Entity
@Table(name="T_STUDENT")
public class Student {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="STU_ID")
    private int id;
    
    @Column(name="STU_NAME", nullable=false, 
            unique=true, columnDefinition="VARCHAR(50)", length=30)
    private String name;    
}

The table “T_STUDENT” generated:


Integer column and BigDecimal column

@Entity
@Table(name="T_STUDENT")
public class Student {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="STU_ID")
    private int id;
    
    @Column(name="STU_NAME")
    private String name;
    
    @Column(name="AGE")
    private Integer age;
    
    @Column(name="MONEY")
    private BigDecimal money;    
}

The table “T_STUDENT” generated:


Specify precision and scale of BigDecimal

(The number 123.45 has a precision of 5 and a scale of 2)

@Entity
@Table(name="T_STUDENT")
public class Student {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="STU_ID")
    private int id;
    
    @Column(name="STU_NAME")
    private String name;
    
    @Column(name="AGE")
    private Integer age;
    
    @Column(name="MONEY", precision=5, scale=2)
    private BigDecimal money;
}

The table “T_STUDENT” generated:


Date column

@Entity
@Table(name="T_STUDENT")
public class Student {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="STU_ID")
    private int id;
    
    @Column(name="STU_NAME")
    private String name;
    
    @Column(name="AGE")
    private Integer age;
    
    @Column(name="MONEY", precision=5, scale=2)
    private BigDecimal money;
    
    @Column(name="START_DATE")
    private Date start;
}

The table “T_STUDENT” generated:


Temporal annotation to specify the date type (date, time, timestamp)

@Column(name="START_DATE")
@Temporal(TemporalType.DATE)
private Date start;

The column “START_DATE” generated:


The value:


@Column(name="START_DATE")
@Temporal(TemporalType.TIME)
private Date start;

The column “START_DATE” generated:


The value:


@Column(name="START_DATE")
@Temporal(TemporalType.TIMESTAMP) //This is the default
private Date start;

The column “START_DATE” generated:


The value:


Specify default date, not insertable, not updateable

@Entity
@Table(name="T_STUDENT")
public class Student {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="STU_ID")
    private int id;
    
    @Column(name="STU_NAME")
    private String name;
    
    @Column(name="START_DATE", 
            columnDefinition="DATE DEFAULT CURRENT_DATE", 
            insertable=false, updatable=false)
    private Date start;
}

The table “T_STUDENT” generated:


Blob and Clob

@Entity
@Table(name="T_STUDENT")
public class Student {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="STU_ID")
    private int id;
    
    @Column(name="STU_NAME")
    private String name;
    
    @Lob
    @Column(name="REPORT")
    private String report;
    
    @Lob
    @Column(name="IMAGE")
    private byte[] image;
}

The table “T_STUDENT” generated: