jpa实体类常见注解

对象与数据库之间的转换
@Entity:标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表

@Table:设置实体类在数据库所对应的表名

@Id:标识类里所在变量为主键

@GeneratedValue:设置主键生成策略,此方式依赖于具体的数据库

@Basic:表示简单属性到数据库表字段的映射

@Column:表示属性所对应字段名进行个性化设置

(1)name属性:被标注字段在数据库表中所对应字段的名称;
(2)length属性:表示该字段的长度,当字段的类型为varchar时,该属性才有效果,默认为255个字符;
(3)nullable属性:表示该字段是否可以为null值,默认是true。
(4)unique属性:表示该字段是否为唯一标识,默认fasle。
(5)precision和scale属性:precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。

@Transient:表示属性并非数据库表字段的映射,ORM框架将忽略该属性

@Temporal:

日期类型转换(参数 TemporalType.DATE()日期  TemporalType.TIME()时间T emporalType.TIMESTAMP()更精确的时间) 

@Enumerated:

    使用此注解映射枚举字段,以String类型存入数据库

注入数据库的类型有两种:EnumType.ORDINAL(Interger)、EnumType.STRING(String)

@Embedded、@Embeddable:

            某一实体类存在属性的角色而又不需要成为表的话就用次注解

@Embeddable:注解在类上,标注此类可被其他类嵌套

@Embedded: 注解在属性上,表示嵌套被@Embeddable注解的同类型类

@ElementCollection:集合映射

当实体类包含多个相同类型的变量的时候就可以使用@ElementCollection来声明这个变量,而JPA会为此生成两个关联的表

场景: 数据库字段 对实体的某个属性描述,当这个属性 不能成为独立的存在的表时就需要这个注解的存在(比如:地址有;家庭地址和公司地址)

@CreatedDate

表示该属性为创建时间 (insert时候设置)

@CreatedBy

用户创建 字段(添加时设置)

@LastModifiedDate

最后修改的时间 字段(update自定设置)

@LastModifiedBy:(很重要)

最后修改用户字段(update自定设置)

关联关系
@OneToOne

@OneToOne注解说明:
(1)targetEntity 属性表示默认关联的实体类型,默认为当前标注的实体类;
(2)cascade 属性表示与此实体一对一关联的实体的联级样式类型。联级样式上当对实体进行操作时的策略。

说明:在定义关系时经常会涉及是否定义Cascade(级联处理)属性,担心造成负面影响. 不定义,则对关系表不会产生任何影响

①CascadeType.PERSIST (级联新建)
②CascadeType.REMOVE (级联删除)
③CascadeType.REFRESH (级联刷新)
④CascadeType.MERGE (级联更新)中选择一个或多个。
⑤还有一个选择是使用CascadeType.ALL ,表示选择全部四项
(3)fetch属性是该实体的加载方式,有两种:LAZY和EAGER。
(4)optional属性表示关联的实体是否能够存在null值。默认为true,表示可以存在null值。如果为false,则要同时配合使用@JoinColumn标记。
(5)mappedBy属性用于双向关联实体时,标注在不保存关系的实体中。

@OneToMany

例如一个公司对应多个部门,可以通过公司获取到其下面的多个部门信息。即公司表与部门表之间是一对多的关系;@OneToMany注解说明
(1)targetEntity属性表示默认关联的实体类型,默认为当前标注的实体类;因为一对多的实体集合时保存在集合类中,因此必须指明集合类中保存的具体类型。
(2)mappedBy属性用于双向关联实体时使用。

@JoinColumn

@JoinColumn(name=”loginId”):在一对一关系时:本表中指向另一个表的外键。一对多关系时:另一个表指向本表的外键。该注解属性详细说明:

(1)name属性是用来标记表中对应的字段的名称。如果不设置name的值,默认情况下,name的取值规则如下:
name=关联的表的名称 + “_” + 关联表主键的字段名
(2)默认情况下,关联的实体的主键一般用来做外键的。如果不想用主键作为外键,则需要设置referencedColumnName属性,如@JoinColumn(name=“address_id”, referencedColumnName=“ref_id”)
【注意】@JoinColumn可以与@OneToOne、@ManyToOne或@ManyToMany标记同时使用。
1)一对一和多对一的@JoinColumn注解的都是在“主控方”,都是本表指向外表的外键名称。
2)一对多的@JoinColumn注解在“被控方”,即一的一方,指的是外表中指向本表的外键名称。
3)多对多中,joinColumns写的都是本表在中间表的外键名称,inverseJoinColumns写的是另一个表在中间表的外键名称。

@JoinTable

@JoinTable中间表注解属性说明:
(1)name属性为连接两个表的表名称。若不指定,则使用默认的表名称,格式如下: “表名1” + “_” + “表名2”
(2)joinColumn属性表示,在保存关系的表中,所保存关联关系的外键的字段,并配合@JoinColumn标记使用;
(3)inverseJoinColumn属性与joinColumn类似,它保存的是保存关系的另外一个外键字段;
(4)catalog和schema属性表示实体指定点目录名称或数据库名称;
(5)uniqueConstraints属性表示该实体所关联的唯一约束条件,一个实体可以有多个唯一约束条件,默认没有约束;

 @JoinTable(name = "SysUserRole", joinColumns = {@JoinColumn(name = "uid")}, inverseJoinColumns = {@JoinColumn(name = "roleId")})
    private List<SysRole> roleList;// 一个用户具有多个角色

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值