如何解决如何在实体中实现地图关联
我尝试在我的实体中实现地图,但是我不知道怎么做:
public class Match {
private Long id;
@Builder.Default
@ManyToMany(targetEntity = Coupon.class,mappedBy = "matchList")
private List<Coupon> couponList = new ArrayList<>();
}
public class Coupon {
private Long id;
@ManyToMany
@JoinTable(
name = "JOIN_MATCH_ID",joinColumns = {@JoinColumn(name = "MATCH_ID",referencedColumnName = "ID")},inverseJoinColumns = {@JoinColumn(name = "COUPON_ID",referencedColumnName = "ID")})
private Map<Match,Integer> mapList = new HashMap<>();
我应该如何实现这些字段?
解决方法
作为一种可能的方法,您可以使用以下映射。
假设您具有以下数据库架构:
create table TST_MATCH
(
mt_id int not null,primary key (mt_id)
);
create table TST_COUPON
(
cn_id int not null,primary key (cn_id)
);
create table TST_MATCH_COUPON
(
match_id int not null,coupon_id int not null,UNIQUE (match_id,coupon_id),foreign key (match_id) references TST_MATCH(mt_id),foreign key (coupon_id) references TST_COUPON(cn_id)
);
您的映射可以像这样:
@Entity
@Table(name = "TST_MATCH")
public class Match
{
@Id
@Column(name = "mt_id")
private Integer id;
@ManyToMany(mappedBy = "matchs",cascade = CascadeType.ALL)
private List<Coupon> coupons;
// ...
}
@Entity
@Table(name = "TST_COUPON")
public class Coupon
{
@Id
@Column(name = "cn_id")
private Integer id;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "TST_MATCH_COUPON",inverseJoinColumns = { @JoinColumn(name = "match_id",referencedColumnName = "mt_id") },joinColumns = { @JoinColumn(name = "coupon_id",referencedColumnName = "cn_id") }
)
@MapKey(name = "id")
private Map<Integer,Match> matchs;
// ...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。