我是靠谱客的博主 无私巨人,最近开发中收集的这篇文章主要介绍JPA 映射一、实体父类二、实体三、字段四、关联关系,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 一、实体父类
  • 二、实体
  • 三、字段
    • 1. 标识字段(ID)
    • 2. 枚举字段
  • 四、关联关系
    • 1. 一对一
    • 2. 一对多
    • 3. 多对一
    • 4. 多对多

一、实体父类

	@MappedSuperclass
	@ToString
	class BaseBean {
	
	    @Id
	    @GeneratedValue(strategy = GenerationType.IDENTITY)
	    Long id
	
	    /**
	     * 状态
	     */
	    @Enumerated(EnumType.STRING)
	    EnumRecordStatus recordStatus = EnumRecordStatus.A
	
	    LocalDateTime createTime = LocalDateTime.now()
	    LocalDateTime updateTime
	
	    boolean equals(o) {
	        if (this.is(o)) return true
	        if (getClass() != o.class) return false
	
	        BaseBean baseBean = (BaseBean) o
	
	        if (id != baseBean.id) return false
	
	        return true
	    }
	
	    int hashCode() {
	        return (int) (id ^ (id >>> 32))
	    }
	}
  • 在父类中统一定义一些共有属性,如创建时间,最后一次更新时间,记录状态等
  • 使用 @MappedSuperclass 声明该类为实体类的父类。
  • equals 方法和 hashcode 方法一定要同时重写, 否则会带来一些 “奇怪” 的错误。

二、实体

	@Entity
	@Table(name = "location")
	public class Location extends BaseBean 
	{
		...
	}
  • 通过 @Entity 标识一个实体类
  • 通过 @Table 标识实体映射的表信息,如表名等。

三、字段

1. 标识字段(ID)

	@Id
	@GeneratedValue(generator = "generator")
	@GenericGenerator(name = "generator", strategy = "increment")
	Long id
  • 通过@Id 注解标识 ID 字段。
  • 通过 @GeneratedValue 和 @GenericGenerator 定义 ID 生成策略。示例中采用的是自增长类型。

2. 枚举字段

	@Enumerated(EnumType.STRING)
	EnumRecordStatus recordStatus = EnumRecordStatus.A
  • @Enumerated(EnumType.STRING) 将枚举字段映射为字符类型,否则会记录数值型的枚举序号。

四、关联关系

1. 一对一

一个标签标定一个目标

	@OneToOne(targetEntity = Target.class)
	Target target

2. 一对多

在建筑物实体中有一个包含所包含楼层的列表:

    @OneToMany(targetEntity = Floor.class, mappedBy = "building", orphanRemoval = true)
    @OrderBy("orderIndex ASC")
    List<Floor> floors = new ArrayList<>()
  • 使用 @OneToMany 注解
  • 使用 @OrderBy 后,查询时会按指定字段排序

3. 多对一

楼层实体中定义,多个楼层对应一个建筑物实体

    @ManyToOne(targetEntity = Building.class)
    Building building
  • 使用 @ManyToOne 注解

4. 多对多

定位实体中,一个定位可能可能属于多种区域,一个区域也有多个定位记录

  	@ManyToMany(targetEntity = Area.class, fetch = FetchType.LAZY)
    @JoinTable(name = "location_2_area",
            joinColumns = @JoinColumn(name = "location_id"),
            inverseJoinColumns = @JoinColumn(name = "area_id"))
    Set<Area> areas = new HashSet<>()
  • 使用 @ManyToMany 注解
  • 可以使用 @JoinTable 来指定关联表信息, joinColumns 表明实体主键在关联表中的列名,inverseJoinColumns 表明关联实体主键在表中映射的列名。

最后

以上就是无私巨人为你收集整理的JPA 映射一、实体父类二、实体三、字段四、关联关系的全部内容,希望文章能够帮你解决JPA 映射一、实体父类二、实体三、字段四、关联关系所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部