Spring Data JPA中常用的注解详解
我们先看看类前面的两个注解
@Entity
对实体注释。任何Hibernate映射对象都要有这个注释
@Table(name = "自定义的表名")
完成表和实体之间的映射(跟上面的注解默认需要配置的)
@Id
把这个类里面所在的变量设置为主键Id
@GeneratedValue
设置主键的生成策略,这种方式依赖于具体的数据库,如果数据库不支持自增主键,那么这个类型是没法用的
@Basic
表示一个简单的属性到数据库表字段的映射,对于没有任何标注的getXxxx()方法,默认为 @Basic fetch: 表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER.
@Column(name = "自定义字段名",length = "自定义长度",nullable = "是否可以空",unique = "是否唯一",columnDefinition = "自定义该字段的类型和长度")
表示对这个变量所对应的字段名进行一些个性化的设置,例如字段的名字,字段的长度,是否为空和是否唯一等设置。
@Transient
表示该属性并非是一个到数据库表字段的映射,ORM框架将忽略该属性. 如果一个属性并非数据库表的字段映射,就务必将其标示为 @Transient,否则,ORM框架默认其注解为 @Basic,对于昨天实践的注解已经解析完了啦!那么今天为了接着对JPA表之间的各种关系的映射继续实践,我们再新建几个实体类!接下来我们分别新建了Author类,Address类和Sex枚举类来举例完成实践! 来我们先看看Author类 在这个类中我们使用并列举了新的注解
@Temporal
当我们使用到java.util包中的时间日期类型,则需要@Temporal注释来说明转化成java.util包中的类型。其中包含三种转化类型分别是: java.sql.Date日期型,精确到年月日,例如“2008-08-08” java.sql.Time时间型,精确到时分秒,例如“20:00:00” java.sql.Timestamp时间戳,精确到纳秒,例如“2008-08-08 20:00:00.000000001”
@Enumerated("需要定义存入数据库的类型”)
使用@Enumerated映射枚举字段,我这里为性别建立了性别的枚举类型,而后面跟上的是存入数据库以String类型存入。
@Embedded和@Embeddable
@ElementCollection
集合映射,当实体类包含多个相同类型的变量的时候就可以使用@ElementCollection来声明这个变量,而JPA会为此生成两个关联的表。例如一个人有家庭住址,也有单位地址;但是“地址”并不能失去人的存在而存在,所以是一个失去独立性的实体类;所以地址不能映射为一个实体,这时就需要映射为组件,及人的信息里边包含地址。是整体与部分的关系。但由于这个地址可能有多个。比如公司地址、出生地址、家庭地址等。 好了今天的时间也不早了,明天会继续讲JPA的双向一对多关系映射,多对多和一对一关系映射还有继承关系映射! 最后附上全网最详尽的JPA文档:https://www.w3cschool.cn/java/jpa-entitymanager.html (来自w3cschool.cn的,打开后颤抖吧!学无止境!)
