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

Java 同一实体之间双向一对多关系的级联添加/删除,java,mysql,jpa,many-to-many,openjpa,Java,Mysql,Jpa,Many To Many,Openjpa,我正在为同一类型的两个实体之间的双向1..*关系建模。我使用的是OpenJPA2.3.0(JPA v2.0),底层数据库是MySQL 假设我想对读者之间的图书借阅进行建模。因此: @Entity @Table(name = "READER") public class Reader { @Id @GeneratedValue private Long id; @Column(nullable = false) private String name;

我正在为同一类型的两个实体之间的双向1..*关系建模。我使用的是OpenJPA2.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;
}
@实体
@表(name=“READER”)
公共类阅读器{
@身份证
@生成值
私人长id;
@列(nullable=false)
私有字符串名称;
@OneToMany(mappedBy=“借款人”)
从档案中借来的私人收藏;
@OneToMany(mappedBy=“贷款人”)
私人收藏档案;
}
@实体
@表(name=“借出记录”)
公共类借阅记录{
@身份证
@生成值
私人长id;
@多通(可选=假)
@JoinColumn(nullable=false)
私人读者借款人;
@多通(可选=假)
@JoinColumn(nullable=false)
私人读者出借人;
@列(nullable=false)
私有字符串书名;
@列(nullable=false)
私有字符串returnByDate;
}
阅读器
有两个藏书集——借来的书和借出的书。
LendingRecord
存储有关出借图书的附加信息我正试图在这两个表之间实现一致的同步。

  • 如果我从两个集合中的一个集合中删除
    借出记录
    ,并保存
    读取器
    ,则:

    • 应从表中删除
      LendingRecord
    • 其他集合也应更新以删除
      LendingRecord
      ——无悬空引用
  • LendingRecord
    添加到任何一个集合时,都应该执行类似的操作

  • 相反,如果我删除一个
    读卡器
    ,则所有相关的
    借出记录
    也应删除,并且这些记录中的其他
    读卡器
    也应更新

有没有一种方法可以使用
CASCADE
s或
orphaneremovation
对这种行为建模?还是有更好的模式来实现相同的行为?

请参阅。