JPA 一对多单向关联和双向关联(没有外键的情况)

假设我有两个表,一个机构表A,一个机构详情表B,表A为主表一的一方,表B为维护表为多的一方,在表B中没有外键,但会有表A主键字段的冗余记录,

1jpa一对多单向关联的设置

class A{

/**
 * A表id
 */
@Id
@GeneratedValue
@Column(name = "a_id")
private Long aId;
/**
 * B集合
 */
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name = "a_id",nullable = false,insertable = false,updatable = false)
private List<B> bList;

}

 

class B{

     @Column(name = "a_id")

       private Long aId;

}

主表添加多的一方的集合,使用@OneToMany和@JoinColumn注解,其中@JoinColumn中name为B表中冗余的A主键字段名称,B表不做任何配置,也没有外键。

1jpa一对多双向关联的设置

class A{

/**
 * B集合
 */
@JsonManagedReference
@OneToMany(mappedBy = "a")
private List<B> bList;

}

class B{

     @ManyToOne @JoinColumn(name = "aId") @JsonBackReference private A a;

}

主表中用@OneTomany中的mappedBy维护双向关系,维护表中用@ManyToOne和@JoinColumn维护关联字段,至于原理机制各位自己去发觉,本人也只是项目中应用。总结下来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值