总结一下曾经用到过的Hibernate
注解
【实体类注解】@Entity
将该类标记为实体
name
:可选,一般省略
使用@Entity
时必须指定实体类的主键属性(@Id
),如果不指定,会报异常:No identifier specified for entity:
【实体类注解】@Table
指定实体类对应的表名。 如果不使用@Table
注释,hibernate
将默认使用类名作为表名称。
与@Entity
配合使用,只能标注在实体的class
定义处,表示实体对应的数据库表的信息
name
:可选,映射表的名称,默认表名和实体名称一致,只有在不一致的情况下才需要指定表名
catalog
:可选,表示Catalog
名称
schema
:可选,表示Schema
名称(相当于数据库名(但这样又不会去创建一个新的数据库))(在创建表时,sql
语句表名前会有数据库名的限定), mysql5.7
支持catalog
但是是不支持schema
的
【实体类注解】@Id
标记属性为该实体的主键。
必须存在,定义了映射到数据库表的主键的属性,一个实体类可以有一个或者多个属性被映射到主键,可置于主键属性或者其getter
前
【实体类注解】@Column
指定此属性或字段的列的详细信息。如果未指定@Column
注释,则默认为属性名。
【实体类注解】@Embedded
和@Embeddable
用来将一个实体类的属性嵌入到另一个实体类中,两个实体类生成一张表
参考链接: https://blog.csdn.net/lmy86263/article/details/52108130
【实体类注解】@MappedSuperclass
注解的作用是让该Entity
作为父类映射,其他的Entity
继承该父类,会在其他的Entity
中添加该父类中的属性,而不会为该父类单独生成一张表。
【实体类注解】@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
【实体类注解】@DiscriminatorColumn
【实体类注解】@DiscriminatorValue
这三个注解配合使用,用来做继承映射,所谓继承映射就是父类抽出了几个实体类中相同的属性,子类各自有各自独特的属性,然后这几个子类可以公用一张表,只不过有一个字段来辨识这张表中的某个数据属于哪个子类,这种情况很多场景都能用的到。
@Inheritance
中的strategy
字段可以有下面的三种选择:
strategy=InheritanceType.SINGLE_TABLE
将父类和所有子类集合,存在一张表中,全部创建新的字段
strategy=InheritanceType.TABLE_PER_CLASS
每一个类创建一个表,这些表相互独立
strategy=InheritanceType.JOINED
将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系
@DiscriminatorColumn
只能用在@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
或JOINED
下,该注解的意义是在表中添加一个字段,这个字段专门用来标识子类,Hibernate
会在自动用该字段对应实体类的类型。
@DiscriminatorValue
这个注解标识要用什么值来标识当前子类
【Repository
注解】@Query
该注解可以写JPQL
语句,也可以写SQL
语句,如果要写SQL
语句,需要设置属性 nativeQuery
为true
【Repository
注解】@Modifying
这个注解用来标明JPQL
或者SQL
所作的操作是和修改数据相关的,如果增删改不加该注解,会报错。
【实体类注解】@OneToMany
, @ManyToOne
,@ManyToMany
,@OneToOne
用来设置该类和对方类的关系,其中的 targetEntity
属性指定的是对方类的class
可以使用 @OneToMany(mappedBy = "customer")
的方式来放弃外键的维护,一般外键的维护交给一的一方就好了。
【实体类注解】@JoinColumn
加入外键引用, name
属性设置外键的名称, referencedColumnName
属性设置的是参照的主表的主键的列名,主表一般是一的一方,所以这里填写一的一方表的主键字段名就可以了。
【实体类注解】@GeneratedValue
这个里面的strategy
属性有以下四种:
TABLE
:使用一个特定的数据库表格来保存主键。SEQUENCE
:根据底层数据库的序列来生成主键,条件是数据库支持序列(比如说Oracle
)。IDENTITY
:主键由数据库自动生成(主要是自动增长型,MySQL
的AUTO_INCREMENT
)AUTO
:主键由程序控制。
【实体类注解】@JoinTable
可以用在多对多上面,将两个实体类与中间表建立起关系
name
属性为中间表的名字
joinColumns
该实体类在中间表中的列名,和引用的主键名
inverseJoinColumns
对方实体类在中间表中的列名,和引用的主键名
【实体类注解】@Transient
可选,表示该属性并非一个到数据库表的字段的映射,ORM
框架将忽略该属性,如果一个属性并非数据库表的字段映射,就务必将其表示标志为@Transient
,否则ORM
框架默认其注解为@Basic
【实体类注解】@Version
定义乐观锁
参考链接: https://www.cnblogs.com/wangzhongqiu/p/7550985.html
【实体类注解】 @Temporal
用于定义映射到数据库的时间精度
@Temporal(TemporalType=DATE)
日期
@Temporal(TemporalType=TIME)
时间
@Temporal(TemporalType=TIMESTAMP)
两者兼具
补充...