多语言展示
当前在线:643今日阅读:39今日分享:10

Spring Data JPA中@Entity相关的注解

Spring Data JPA中实体类常用的注解@Entity,在javax.persistence包中,使用@Entity注解去定义JPA中的实体,以及管理实体之间的关系。其中要用到的基本注解有@Table,@Id,@Transient,@Column,@Temporal等等,接下来我们就分别介绍这些基础的注解的用法。
工具/原料
1

IntelliJ IDEA

2

mysql

方法/步骤
1

@Entity注解加在实体类上,定义对象将会成为被JPA管理的实体,将映射到指定的数据库。@Table注解用来说明该实体类对应的表和数据库,其中name =“xxx',用来表示数据表的名字,catalog = “xxx'是数据库的名字,@Data注解是lambda的注解,用来节省代码开发的,不是JPA中的注解。

3

@IdClass注解可以实现一个实体类中有两个主健,即联合主健。首先我们需要创建一个联合主健类并且实现序列化接口,类名为TeacherBlogKey,该类中有id和studentId这两个字段,这个类的要求有三个:1. 需要实现Serializable接口,这个我们已经做到了;2. 是需要有一个默认的public的无参构造方法,我们使用lambda的@NoArgsConstructor帮我们实现,或者如果没有定义有参构造的情况下,这个注解也不需要了,因为有默认的无参构造方法;3.必须覆写equals和hashCode方法。使用时,在Teacher实体类上使用@IdClass(value = TeacherBlogKey.class)注解,然后id和studentId都分别使用@Id注解即可。

4

@Basic表示属性到数据库字段的映射,实体类的属性不加任何注解的时候默认是@Basic注解。 如果字段需要特别说明的话,我们使用@Column注解,该注解定义属性对应数据库的列名,以及是否为空等的限制。还有@NonNull注解这注解和@Column(nullable = false)的效果是一样的。

5

如果实体类中的一个属性并不想和数据库中的字段做映射的话,我们可以使用@Transient注解,这个注解表示非持久化属性,与@Basic注解的作用相反,JPA映射数据库的时候会忽略它。

6

@Temporal注解用来设置Date类型的属性精度的设置,@Temporal(TemporalType.TIMESTAMP)精确到“年月日时分秒”,当然如果你使用的是spring框架的话,也可以用@DateTimeFormat(pattern='yyyy-MM-dd HH:mm:ss')注解来代替。TemporalType.DATE表示只有日期,TemporalType.TIME表示只有时间。

7

@Enumerated是用来映射枚举类型的字段的,首先我们创建一个枚举类用来表示性别,在需要枚举类属性的实体类中,使用@Enumerated(EnumType.STRING)注解,另外还需要@Column(name = 'gender', columnDefinition = 'ENUM')定义字段的类型为枚举,因为如果不使用@Column指定字段是枚举类型,若配置了spring.jpa.properties.hibernate.hbm2ddl.auto = validate, 启动会报错。

注意事项
1

以上是JPA实体类中常用的注解,是在工作中长期实践的用法,希望能帮到您!

2

如果该文章对您有帮助,请帮忙点赞和投票,您的支持是我持续写作的动力。

推荐信息