gpt4 book ai didi

java - Hibernate 与附加表的多对多关系

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:30 27 4
gpt4 key购买 nike

我正在使用 Hibernate,我希望能够创建多对多对多关系。当前场景是:-

一个乐队可能会在很多场馆演出,一个场馆可能有很多乐队。

BAND >------< VENUE

这样就构成了多对多的关系,所以我用了一个join表,比如:-

BAND ----< BAND_VENUES >---- VENUE

我能够使用 hibernate 或 SQL 创建它;查看测试用例:-

@Entity
@Table(name = "Band")
public class Band implements Serializable,
{
@Id
@GeneratedValue(generator = "bandId" )
@GenericGenerator(name = "bandId", strategy = "uuid2")
private String bandId;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Band_Venues",
joinColumns =
{
@JoinColumn(name = "bandId")
},
inverseJoinColumns =
{
@JoinColumn(name = "venueId")
})
}

@Entity
@Table(name = "Venue")
public class Venue implements Serializable
{
@Id
@GeneratedValue(generator = "venueId" )
@GenericGenerator(name = "venueId", strategy = "uuid2")
private String venueId;
}

这看起来很简单,对我来说很有意义。

如果我使用以下场景添加另一个多对多关系,我会感到困惑。

一个乐队可能会在不同的日期/时间在许多 field 演出,所以:-

BAND ----< GIG_DATES >-----< GIG_DATES_VENUES >---- VENUE

我认为这种关系应该是什么,但是使用 hibernate ,我实际上没有“BAND_VENUES”的映射,所以我该如何创建这种关系?

我使用的是注释而不是映射文件

最佳答案

当多对多关系获得属性的那一刻,它就不再是关系了。在 JPA 中,关系没有属性,实体有。

这种“与属性的关系”被建模为与原始实体具有多对一关系的中间实体,在本例中为 BandVenue。大致流程如下:

@Entity
@IdClass(GigId.class)
public class Gig {
@Id
@ManyToOne
private Band band
@Id
@ManyToOne
private Venue venue;

}

public class GigId implements Serializable{
private String band;

private String venue;
...
//date
}

public class Band { ..
@OneToMany(mappedBy = "band")
private Collection<Gig> gigs;
...
}

public class Venue {..
@OneToMany(mappedBy = "venue")
private Collection<Gig> gigs;
...
}

关于java - Hibernate 与附加表的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com