Spring Data JPA基础:实体类与数据表关联之基础注解

1、@Entity

@Entity表明这个class是实体类,并且使用默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名。

2、@Table

@Table注解用来标识实体类与数据表的对应关系。

  • name:表示该实体类映射的表名。
  • catalog:指定数据库名称,默认为当前连接url配置的数据库。
  • schema:指定数据库的用户名 ,默认为当前配置的用户。
  • uniqueConstraints:用于批量设置唯一约束。

3、@Column

@Column注解来标识实体类中属性与数据表中字段的对应关系。

查看@Column源码发现@Column注解共有10个属性,且均为可选属性。

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
    //name属性定义了被标注字段在数据库表中所对应字段的名称。
    String name() default "";
    
    //unique属性表示该字段是否为唯一标识,默认为false.
    boolean unique() default false;
    
    //nullable属性表示该字段是否可以为null值,默认为true。
    boolean nullable() default true;
    
    //insertable属性表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。
    //insertable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。
    boolean insertable() default true;
    
    //updatable属性表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。
    //updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。
    boolean updatable() default true;
    
    //columnDefinition属性表示创建表时,该字段创建的SQL语句
    String columnDefinition() default "";
    
    //table属性定义了包含当前字段的表名。
    String table() default "";
    
    //length属性表示字段的长度,当字段的类型为varchar时,该属性才有效。
    int length() default 255;
    
    //precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。
    int precision() default 0;
    int scale() default 0;
}

columnDefinition的使用:

@Column(name = "name", nullable = false, columnDefinition = "varchar(20) not null")
private String name;

由于String类型在数据库中默认是varchar,使用columnDefinition可以进行指定。

@Column(name = "content", columnDefinition = "text")
private String content;

4、@Id

@Id 标注用于声明一个实体类的属性映射为数据库的主键列。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

5、@GeneratorValue

@GeneratorValue属于一个JPA注解(从JAVA EE 5开始,存在于javax.persistence包下),其下包含了两个抽象的参数,GenerationType类型的strategy和String类型的generator,并且两个参数都有相应的默认值。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

GenerationType枚举类是@GeneratorValue注解的strategy的值,一共有四种类型。

  • TABLE:使用一个特定的数据表来保存主键。
  • SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
  • IDENTITY:主键由数据库自动生成,主要支持数据库主键自增。
  • AUTO:主键由程序控制,这是GenerationType的默认值。

第四种策略AUTO,定义主键自动生成策略为uuid。

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "user-uuid")
@GenericGenerator(name = "user-uuid", strategy = "uuid")
private String id;

6、@GenericGenerator

自定义主键生成策略,由@GenericGenerator实现。

  • name属性指定生成器名称。 与@GeneratorValue中 generator 的值对应。
  • strategy属性指定具体生成器的类名。
  • parameters得到strategy指定的具体生成器所用到的参数。

Hibernate主键生成策略和各自的具体生成器之间的关系,在IdentifierGeneratorFactory接口中已经定义了。

public DefaultIdentifierGeneratorFactory() {
		register( "uuid2", UUIDGenerator.class );
		register( "guid", GUIDGenerator.class );			
		register( "uuid", UUIDHexGenerator.class );			
		register( "uuid.hex", UUIDHexGenerator.class ); 	
		register( "assigned", Assigned.class );
		register( "identity", IdentityGenerator.class );
		register( "select", SelectGenerator.class );
		register( "sequence", SequenceStyleGenerator.class );
		register( "seqhilo", SequenceHiLoGenerator.class );
		register( "increment", IncrementGenerator.class );
		register( "foreign", ForeignGenerator.class );
		register( "sequence-identity", SequenceIdentityGenerator.class );
		register( "enhanced-sequence", SequenceStyleGenerator.class );
		register( "enhanced-table", TableGenerator.class );
	}

几种常见的主键策略生成器:

  • native:对于 oracle 采用 Sequence 方式;对于 MySQL 和 SQL Server 采用 Identity 方式。native就是将主键的生成工作交由数据库完成,hibernate不管。
  • uuid:采用128位的uuid算法生成主键,uuid被编码为一个32位16进制数字的字符串,占用空间大。
  • guid:采用数据库底层的guid算法机制,对应MYSQL的uuid()函数,SQL Server的newid()函数,ORACLE的rawtohex(sys_guid())函数等。
  • assigned: 在插入数据的时候主键由程序处理,等同于JPA中的AUTO,这是@GenericGenerator的默认设置。

7、@Transient

被@Transient 标注的属性会被JPA所忽略,不会映射到数据库中,即程序运行后数据库中将不会有该字段。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值