gpt4 book ai didi

java - JPA 注释 - 如何将连接表的两个字段合并为一列?

转载 作者:行者123 更新时间:2023-11-29 10:49:41 27 4
gpt4 key购买 nike

所以我有两个类,一个路线和一个巴士站。一条路线“使用”两个 BusStop 对象,一个作为起点,一个作为目的地。我需要通过连接表“使用”来映射这种关系。

此连接表不需要区分 BusStop 是用于起点还是目的地。基本上,我只需要起点和目的地成为此连接表中的一列(允许重复),这样我就可以获得哪些路线使用哪些站点的完整映射。

这是我的设置方式(假设 getter 和 setter 都在那里):

public class Route {
@Id
private String number;

@Column(nullable = false)
private int frequency;

@ManyToOne
@JoinTable(
name = "Uses",
joinColumns = @JoinColumn(name = "number"),
inverseJoinColumns = @JoinColumn(name = "id")
)
private BusStop start;

@ManyToOne
@JoinTable(
name = "Uses",
joinColumns = @JoinColumn(name = "number"),
inverseJoinColumns = @JoinColumn(name = "id")
)
private BusStop destination;
...
}

public class BusStop {
@Id
private int id;

@Column(nullable = false)
private String description;

@OneToMany
@JoinTable(
name = "Uses",
joinColumns = @JoinColumn(name = "id"),
inverseJoinColumns = @JoinColumn(name = "number")
)
private Set<Route> routes;
...
}

现在我遇到的问题是,这会导致“使用”表中只有每个路线 id 之一,尽管它成功地保留了重复的停靠点 id。我假设这与我尝试在 Route 类中创建两个“Uses”表有关?

那么正确的方法到底是怎样的呢?

最佳答案

我会采用更简洁的方式来做到这一点。

这是我的实体。

package com.ansh.entity;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;

@Entity
@Table(name = "routes")
@Getter @Setter
public class Route {

@Id
@Column(name = "number")
private String number;

@Column(name = "frequency", nullable = false)
private int frequency;

@ManyToOne
@JoinColumn(name = "start_id")
private BusStop start;

@ManyToOne
@JoinColumn(name = "destination_id")
private BusStop destination;
}

package com.ansh.entity;

import com.google.common.collect.Sets;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.Set;

@Entity
@Table(name = "bus_stops")
@Getter @Setter
public class BusStop {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column(name = "description", nullable = false)
private String description;

@OneToMany(mappedBy = "start")
private Set<Route> outgoingRoutes = Sets.newHashSet();

@OneToMany(mappedBy = "destination")
private Set<Route> incomingRoutes = Sets.newHashSet();

public Set<Route> getRoutes() {
return Sets.union(outgoingRoutes, incomingRoutes);
}
}

关于java - JPA 注释 - 如何将连接表的两个字段合并为一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43958586/

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