JPA实体类注解,看这篇就全会了

哈喽,大家好,我是指北君。,今天给大家介绍一下 JPA 实体类中的注解,希望能对大家有帮助。,标注于实体类声明语句之前,指出该 Java 类为实体类,将映射到指定的数据库表。,不与 @Table 结合时,表名默认为类名的 SnakeCase(蛇形命名法),若使用name属性,则表名为 name 值。,当实体类与其映射的数据库表名不同名时需要使用@Table标注说明,该标注与@Entity标注并列使用,置于实体类声明语句之前。,表示一个简单的属性到数据库表的字段的映射,对于没有任何注解的属性,默认即为 @Basic 。,表示该属性并非一个到数据库表的字段的映射,ORM 框架将忽略该属性。,如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic 。,当实体的属性与其映射的数据库表的列不同名时需要使用@Column 标注说明,该注解通常置于实体的属性前或属性的getter方法之前,还可与 @Id 标注一起使用。,用于声明一个实体类的属性映射为数据库的主键列。,AUTO:JPA 自动选择合适的策略,是默认选项;,IDENTITY:采用数据库 ID自增长的方式来自增主键字段,Oracle 不支持这种方式;,SEQUENCE:通过序列产生主键,通过 @SequenceGenerator 注解指定序列名,MySql 不支持这种方式,TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。该策略一般与另外一个注解一起使用@TableGenerator。,自定义主键生成策略,直接映射枚举类型的字段。,ORDINAL:映射到数据库字段为数字(默认),String:映射到数据库字段为字符串,对于日期时间属性映射时,可使用 @Temporal 注解来调整精度。,指定实体的访问模式(Access mode),包括AccessType.FIELD及AccessType.PROPERTY。,@EmbeddedId + @Embeddable,当需要多个属性作为复合主键时,可以把该属性做为一个内部类嵌套在实体类中,使用@EmbeddedId + @Embeddable实现:,必须要实现Serializable接口,需要有无参的构造函数,注解复合主键的类,复合主键类必须满足:,实体间一对一的关系。,REMOVE:级联删除操作。删除当前实体时,与它有映射关系的实体也会跟着被删除。,MERGE:级联更新(合并)操作。当前对象中的数据改变,会相应地更新级联对象中的数据。,DETACH:级联脱管/游离操作。如果要删除一个实体,但是它有外键无法删除,你就需要这个级联权限了。它会撤销所有相关的外键关联。,REFRESH:级联刷新操作。更新数据前先刷新对象和级联对象,再更新。,PERSIST:级联持久化(保存)操作。持久保存拥有方实体时,也会持久保存该实体的所有相关数据。,ALL,当前类增删改查改变之后,关联类跟着增删改查,拥有以上所有级联操作权,一对一关系的例子,people 表(id,name,sex,birthday,address_id) address 表(id,phone,zipcode,address),People和Address是一对一的关系。,方式一:通过外键的方式(一个实体通过外键关联到另一个实体的主键),@JoinColum:保存表与表之间关系的字段,它要标注在实体属性上。一般修饰在主控方,用来定义一对一,一对多等关系列。,关联的实体的主键一般是用来做外键的。但如果此时不想主键作为外键,则需要设置referencedColumnName属性。,方式二:通过关联表的方式来保存一对一的关系。,关联表:people_address (people_id,address_id),@JoinTable:用于构建一对多,多对多时的连接表,默认会以主控表加下划线加反转表为表名。,注解一对多和多对一关系。,例子,注解多对多的关系。,角色和权限是多对多的关系。一个角色可以有多个权限,一个权限也可以被很多角色拥有。,JPA中使用@ManyToMany来注解多对多的关系,由一个关联表来维护。这个关联表的表名默认是:主表名+下划线+从表名。,这个关联表只有两个外键字段,分别指向主表ID和从表ID。字段的名称默认为:主表名+下划线+主表中的主键列名,从表名+下划线+从表中的主键列名。,例子,权限表 user_permission(id,permission_name),角色表 user_role(id,department_id, create_time, description, name, update_time),关联表 user_role_permission 表(role_id, permission_id),注意,多对多关系中一般不设置级联保存、级联删除、级联更新等操作。,本例中,由于加了@JoinTable注解,关联关系表会按照注解指定的生成。否则去掉注解,指定Role为关系维护端,所以生成的关联表名称为:user_role_permission,关联表的字段为:role_id 和permission_id。,以上就是 JPA 实体类中的注解介绍,文中的例子仅仅浅尝辄止,希望大家可以实际应用一下,后续我也会更深入的讲解一些 JPA 的高级用法。

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/16889.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年3月5日 上午12:00
下一篇 2023年3月7日 下午10:34