JPA: OneToMany relationship with multiple mappedBy attributes

2.5k Views Asked by At

I'm having a problem to map a relationship between instances of one single entity. Let me give you the JPA entities first.

Article entity

@Entity
@Table(name = "article")
public class Article {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "article", orphanRemoval = true)
    private Collection<Keyword> keywords;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "article1", orphanRemoval = true)
    private Collection<RelatedArticles> relatedArticles;

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

    ...
}

RelatedArticle entity

@Entity
@Table(name = "related_articles")
public class RelatedArticles {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @JoinColumn(name = "article1_id")
    @ManyToOne(optional = false)
    private Article article1;

    @JoinColumn(name = "article2_id")
    @ManyToOne(optional = false)
    private Article article2;

    private Float weightedJaccardIndex;

    ...
}

Further explanation

An article can be related to other articles which is realized by the RelatedArticle entity. The article can be referenced by article1 or article2. That means the collection relatedArticles in Article should contain all instances of RelatedArticle where the ID either matches article1 or article2.

Question

How can I map a single collection of RelatedArticles in my Article entity where the origin Article is either article1 or article2? Alternative solutions are welcome!

0

There are 0 best solutions below