簡體   English   中英

將 OneToMany 雙向關系更改為 ManyToMany 雙向

[英]Changing a OneToMany Bidirectional Relationship to ManyToMany Bidirectional

我想將 courseDetails 上的以下映射轉換為 manyToMany。 這是因為我得到一個異常Found shared references to a collection: com.xyz.courseDetails我假設發生這種情況是因為數據庫中的關系實際上不是一對多的,因為有一些 course_detail 元組有多個課程。

@Entity
@Table(name = "courses")
public class Course
{ 

    @Column(name = "course_detail_id")
    private Long extendedCourseDetailId;
    ...

    @OneToMany(fetch = FetchType.LAZY, targetEntity = CourseDetail.class,  cascade = CascadeType.ALL)
    @JoinColumn(name="id", referencedColumnName="course_detail_id")
    private List<CourseDetail> courseDetails = new ArrayList<>();
}

簡單地將注釋更改為 ManyToMany 不起作用,JPA 不知何故找不到相關列。 為什么? 我怎樣才能做到這一點?

你覺得這怎么樣:

  • 假設實體 CourseDetail 的 ID 為:
public class CourseDetail
{ 
    @Id
    @Column(name = "cd_id")
    private Long courseDetailId;
  • 所以這個未經測試的代碼可能會對你有所幫助。
    • 其中將自動創建表“course__course_detail”以保存與 2 列的關系:“course_id”和“coursedetail_id”。
@Entity
@Table(name = "courses")
public class Course
{ 
    @Id
    @Column(name = "c_id")
    private Long courseId;

    // @Column(name = "course_detail_id") // I comment because I dont understand the purpose
    // private Long extendedCourseDetailId;
    ...

    
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "course__course_detail", 
        joinColumns = @JoinColumn(name = "course_id", referencedColumnName="c_id"), 
        inverseJoinColumns = @JoinColumn(name = "coursedetail_id", referencedColumnName="cd_id"),
        )
    private List<CourseDetail> courseDetails = new ArrayList<>();
}

PS:未測試隨時在評論中告訴我更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM