@Entity
表明是一个实体类,用在类上面。
定义对象将会成为被JPA管理的实体,将映射到指定的数据库。@Table注解用来说明该实体类对应的表和数据库,其中name =“xxx",用来表示数据表的名字,catalog = “xxx"是数据库的名字,@Data注解是lambda的注解,用来节省代码开发的,不是JPA中的注解。
@Table(name=”“)
对应的数据表名,一般@Entity和@Table这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略
@Id
注解表名是表的自增主键,一个实体里只能有被赋予@Id
@GeneratedValue(strategy = )
指定自增主键生成策略,GenerationType有四个值:TABLE、SEQUENCE、IDENTITY、AUTO,我们常用的是后两种,一般mysql数据库使SEQUENCE,AUTO的话是让JPA自己选择合适的策略,默认的策略就是AUTO。
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int id;
String username;
String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
@Column
映射表对应的字段名
@Basic
表示该属性是表字段的映射。 如果实体的字段上没有任何注解默认就是@Basic。如果字段需要特别说明的话,我们使用@Column注解,该注解定义属性对应数据库的列名,以及是否为空等的限制。还有@NonNull注解这注解和@Column(nullable = false)的效果是一样的。
@Transient
表示该属性不是表字段的映射。这个注解表示非持久化属性,用在实体类中的一个属性并不想和数据库中的字段做映射。
@Lob
将属性映射成支持的大对象类型 ,如Clob、Blob
@IdClass
一个实体里可以有两个主键,@IdClass是联合主键,一般不用。首先我们需要创建一个联合主健类并且实现序列化接口,类名为TeacherBlogKey,该类中有id和studentId这两个字段,这个类的要求有三个:1. 需要实现Serializable接口,这个我们已经做到了;2. 是需要有一个默认的public的无参构造方法,我们使用lambda的@NoArgsConstructor帮我们实现,或者如果没有定义有参构造的情况下,这个注解也不需要了,因为有默认的无参构造方法;3.必须覆写equals和hashCode方法。
使用时,在Teacher实体类上使用@IdClass(value = TeacherBlogKey.class)注解,然后id和studentId都分别使用@Id注解即可。
@Temporal
用来设置Date类型的属性映射到对应精度的字段。@Temporal(TemporalType.TIMESTAMP)精确到“年月日时分秒”,当然如果你使用的是spring框架的话,也可以用@DateTimeFormat(pattern=“yyyy-MM-dd HH:mm:ss”)注解来代替。TemporalType.DATE表示只有日期,TemporalType.TIME表示只有时间。
@JsonIgnore
作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。
@JoinColumn(name=”loginId”)
一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。
@OneToOne、@OneToMany、@ManyToOne
对应hibernate配置文件中的一对一,一对多,多对一。