级联添加/删除同一实体之间的双向一对多关系

时间:2015-03-07 10:43:42

标签: java mysql jpa many-to-many openjpa

我在两个相同类型的实体之间建模双向1 .. *关系。我使用OpenJPA 2.3.0(JPA v2.0),底层数据库是MySQL。

让我们说我想模拟读者之间的借书/借阅。所以:

@Entity
@Table(name = "READER")
public class Reader {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false)
    private String name;

    @OneToMany(mappedBy = "borrower")
    private Collection<LendingRecord> borrowedFromRecords;

    @OneToMany(mappedBy = "lender")
    private Collection<LendingRecord> lentToRecords;
}

@Entity
@Table(name = "LENDING_RECORD")
public class LendingRecord {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne(optional = false)
    @JoinColumn(nullable = false)
    private Reader borrower;

    @ManyToOne(optional = false)
    @JoinColumn(nullable = false)
    private Reader lender;

    @Column(nullable = false)
    private String bookName;

    @Column(nullable = false)
    private String returnByDate;
}

Reader有两个收藏品 - 用于借书和借书。 LendingRecord存储有关借出书籍的其他信息。 我试图在这两个表之间实现一致的同步。

  • 如果我从两个馆藏的一个中删除LendingRecord并保存Reader,那么:

    • 应从表格中删除LendingRecord
    • 其他集合应该更新以删除LendingRecord - 没有悬空参考!
  • LendingRecord添加到任何一个集合时,都应采取类似的措施。

  • 相反,如果删除Reader,则还应删除所有关联的LendingRecord,并且还应更新这些记录中的其他Reader

有没有办法使用CASCADEorphanRemoval对此行为进行建模?或者是否有更好的架构来实现相同的行为?

0 个答案:

没有答案