我在两个相同类型的实体之间建模双向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
。
有没有办法使用CASCADE
或orphanRemoval
对此行为进行建模?或者是否有更好的架构来实现相同的行为?