JPA—Day3—映射关系

1 单向的一对多

(不会专门使用)

1.1 配置

	1方配置(泛型必须加)
		 @OneToMany
	    @JoinColumn(name="dir_id")
	    private Set<Product> products = new HashSet<>();
	 }

1.2 保存

无论怎么保存,都在额外发送sql ,所有一般不用单向一对多

1.3 查询

lazy加载

1.4集合的使用

在定义实体类的时候,使用到集合时使用集合接口
List/Set区别
	List是有序 可以重复
	Set 无顺序,不能重复
Set  一般使用在多对多 或者 一对多
List   一般组合 一般使用单据上面

1.5 集合排序

@OrderBy("price DESC")

2 双向的一对多 或者 多对一

配置:尽量让多方来维护关系,一方放弃管理mappedBy
	 @OneToMany(mappedBy = "dir")

2.1级联操作保存

级联:指操作一方数据的同时可以一并操作多方的数据
分类:
	级联保存@OneToMany(cascade = CascadeType.PRESIST)
	级联删除@OneToMany(cascade = CascadeType.REMOVE)
	
孤儿删除:让一方解除关系 ,才能从1方删除多方(注意:只能应用在一对多关系)	

强级联:@OneToMany(cascade = CascadeType.ALL,mappedBy = "dir",orphanRemoval = true)

3 单向多对多

3.1单向多对多配置

 一个用户可以拥有多个角色,一个角色 可以拥有多个用户 
 User
  @ManyToMany
  @JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="user_id")},
        inverseJoinColumns ={@JoinColumn(name="role_id")} )
 private Set<Role> roles = new HashSet<>();

4 双向多对多

4.1配置

role
	@ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
	@JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="role_id")},
        inverseJoinColumns ={@JoinColumn(name="user_id")} )
        private Set<User> users = new HashSet<>();

user
	@ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
	@JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="user_id")},
        inverseJoinColumns ={@JoinColumn(name="role_id")} )
         private Set<Role> roles = new HashSet<>();

4.2操作

级联删除
	@ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
	 @JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="user_id")},
        inverseJoinColumns ={@JoinColumn(name="role_id")} )

5 一对一

重点配置:
	(1)建议使用单向 多 对一 不要使用单向一对多
	(2)如果要使用1对多,尽量使用双向配置,让1方放弃管理
	(3) 多对多 如果想相互获取数据 配置双向,如果单向操作 就配置单向
	(4)   使用 多对一 来代替一对一 ,如果实在使用一对一 使用唯一外键的方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值