JPA多对二关系

时间:2017-03-14 13:56:18

标签: java jpa java-ee persistence

我是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;

    //...
}

1 个答案:

答案 0 :(得分:1)

我不知道这是否有效,但也许您可以尝试添加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关系。