我是JPA的新手,想知道JPA是否包含针对我的问题的解决方案。 Els我将只需要创建一个ManyToMany关系。

我的应用程序包含道路和照相机。道路始于摄像机,始于摄像机。我是通过在cameraPointA类中创建属性cameraPointBRoadSegment来创建的。这创造了多对二的关系。我以为可以将其定义为两个多对一的关系,但这似乎是不可能的。

CameraPoint.java

@Entity
public class CameraPoint implements Serializable {

    @Id @GeneratedValue
    private long id;

    @OneToMany (mappedBy = "cameraPointA or cameraPointA") //<== The Problem
    private List<RoadSegment> roads;

    //...
}


RoadSegment.java

@Entity
public class RoadSegment implements Serializable {

    @Id @GeneratedValue
    private long id;

    @ManyToOne(cascade = CascadeType.ALL)
    private Region region;

    @ManyToOne(optional=false)
    private CameraPoint cameraPointA;
    @ManyToOne(optional=false)
    private CameraPoint cameraPointB;

    //...
}

最佳答案

我不知道这是否行得通,但也许您可以尝试将CameraPoint的另一个列表添加到RoadSegments,这表示“相机”有一个以相机为起点的道路列表,另一个列表表示“相机”为持续。

@Entity
public class CameraPoint implements Serializable {

@Id @GeneratedValue
private long id;

@OneToMany (mappedBy = "cameraPointA")
private List<RoadSegment> roadsA;

@OneToMany (mappedBy = "cameraPointB")
private List<RoadSegment> roadsB;

//...
}


使用双向关系真的必要吗?也许不是,您的模型会更容易。

例如,如果您始终从CameraPoint到达RoadSegment,则不需要@OneToMany上的CameraPoint关系。

逆模式也是如此,如果您总是从先前的RoadSegment获取CameraPoint,则@ManyToOne关系不是必需的。

09-08 07:12