JPA(三):JPA基本注解

基本注解

@Entity

标注用于实体类声明语句之前,指出该Java类为实体类,将映射到指定的数据库表。如声明一个实体类Customer,将它映射到数据的coustomer表上。

package com.dxsoft.jpa.helloword;

import javax.persistence.Entity;

@Entity
public class Person {
  //...  
}

@Table

  • 当实体类与其映射的数据库表名不同名时,需要使用@Table标注说明,该注解与@Entity标注并列使用,置于实体类声明语句之前,可写于单独语句行,也可与声明数据同行。
  • @Table标注的常用选项是name,用于指明数据库的表名。
  • @Table标注还有两个可选项catalog和schema用于设置表所属的数据库目录或模式,通常为数据库名。
  • uniqueConstraints选项用于设置约束条件,通常不须设置。
package com.dxsoft.jpa.helloword;

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "jpa_person")
public class Person {
  //。。。  
}

@Id

  • @Id标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明数据同行,也可卸载单独行上。
  • @Id标注也可置于属性的getter方法之前。

@GeneratedValue

  • @GeneratedValue用于标注主键的生成策略,通过strategy属性指定。默认情况下,JPA自动选择一个最合适底层数据库的主键生成策略:SqlServer对应identity,MySql对饮auto increment。
  • 在javax.persistence.GenerationType中定义了以下几种可供选择的策略:
    •   --- IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle不支持这种方式(oracle12g后,应该支持了。);
    •   --- AUTO:JPA自动选择合适的策略,是默认选项;
    •   --- SEQUENCE:通过序列产生主键,通过@SequenceGenerator注解指定序列名,MySql不支持这种方式。
    •   --- TABLE:通过表产生键,框架借助由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

@Column

  • 当实体的属性与其映射的数据库表的列不同名时需要使用@Column标注说明,该属性通常置于实体的属性声明语句之前,还可与@Id标注一起使用。
  • @Column标注的常量属性是name,用于设置映射数据库表的列名。此外,该注解还包含其他多个属性,比如:unique,nullable,length等。
  • @Column标注的columnDefinition属性:表示该字段在数据中的实际类型,通常ORM框架可以根据属性类型自动判断数据中的字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是Date,Time还是Timestamp。此外,String的默认类型为varchar,如果要将String类型映射到特定数据库的BLOB或Text字段类型。
  • @Column标注也可以置于属性的getter方法之前。

@Basic

  • @Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxx()方法,默认即为Basic
  • fetch:表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER
  • optional:表示该属性是否允许为null,默认为true。

@Transient

@Temporal

用table来生成数据表的主键

猜你喜欢

转载自www.cnblogs.com/yy3b2007com/p/9186698.html