Hibernate属性注解

属性级别注解可以加在属性字段上也可以加在对应的get方法上。
@Id 实体类中必须要有,对应了数据库表的主键
@Version 用于实现乐观锁
@SequenceGenerator 与@GeneratedValue配合使用,需要数据库支持序列号
@GeneratedValue 声明主键生成策略。
@Column 映射到表的字段,以及相关定义
@Embedded 表示该属性是嵌入类
@EmbeddedId 表示该属性是嵌入类作为复合主键
@Lob 表示属性将被持久化为Blob或者Clob类型
@Basic 默认会加上该注解,默认值是可空和即时加载
@Transient 表示该属性在数据库中没有相对应的字段,让orm框架忽略该属性

@Id

实体类中必须要有,对应了数据库表的主键,可以有一个或多个属性。(若多个属性定义为主键,则实体类要实现serializable接口。)

@Column

映射到表的字段,并且声明数据库中该字段的详细定义。
name:对应字段名,默认与属性名一致(大写对应划线分隔小写)
nullable: 是否可空,默认true。
unique:是否是唯一标识,默认false。
length: 字段长度,只对string类型的生效,默认255
insertable:表示该字段不可插入,默认为true
updateable: 表示该字段一旦插入不可更新。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。对于一经创建就不可更改的字段,可以设置该属性。

@GeneratedValue

@GeneratedValue(strategy=GenerationType.***, generator="")

public @interface GeneratedValue {
    GenerationType strategy() default GenerationType.AUTO;

    String generator() default "";
}

非必须,声明主键生成策略。

  1. GenerationType.AUTO: 默认值,把主键生成策略交给JPA厂商(主键的生成规则是JPA的实现者来确定的),由它根据具体的数据库选择合适的策略,可以是Table/Sequence/Identity中的一种。。
  2. GenerationType.INDENTITY:
    主键交由数据库自动生成(如自增)。
    根据数据库的Identity字段生成,多数数据库支持IDENTITY列,数据库会在新行插入时自动给ID赋值,这也叫做ID自增长列
  3. GenerationType.SEQUENCE: 使用根据底层数据库的序列( Sequence)来生成主键,条件是数据库支持序列。。
    和@SequenceGenerator(name,sequenceName,initialValue,allocationSize)配合使用。
属性 说明
name 命名该生成器的名字,需要与@GeneratedValue的generator的值相对应。
sequenceName 数据库序列号的名字,重名会导致多个表共用一个序列号
initialValue 初始值
allocationSize 一次性获取多个,避免频繁获取。
  1. GenerationType.TABLE:使用指定表来决定主键取值,结合@TableGenerator使用,generator指定生成器的名字。
    这种方法生成主键的策略可以适用于任何的数据库,不必担心不同数据库不兼容造成的问题。
    可以在数据库中新建序列表来生成主键,序列表一般包含两个字段:第一个字段表示表,第二个字段是该表的最大序号。这样,只需要一张序列就可以用于多张表的主键生成。
@Id
@GeneratedValue(strategy = GenerationType.TABLE,generator="my_gen_name")
@TableGenerator(name = "my_gen_name", table="my_gen_table_name", pkColumnName="gen_name", valueColumnName="gen_value", pkColumnValue="pk_column_value", allocationSize=50)

//那么新增记录的时候表my_gen_name的gen_name=pk_column_value的这行记录的gen_value会加1

@Version

用于实现乐观锁,version相同的才允许更新。

@Transient

表示该属性在数据库中没有相对应的字段,让orm框架忽略该属性

@Embedded

表示该属性的类是嵌入类(该类需要@Embeddable)

@EmbeddedId

使用嵌入式主键类来作为该实体类的复合主键。
该主键类必须实现serializable接口,必须由默认public无参构造函数,必须重写equals和hashCode方法

@Lob

表示属性将被持久化为Blob或者Clob类型

@Basic

该注解默认被加上

属性 说明
fetch EAGER(即时加载)和LAZY(懒加载),默认EAGER
optional 属性是否可空,默认true

你可能感兴趣的:(Hibernate属性注解)