我处于这种情况,我需要将我的JPA单向关系更改为双向(Account
实体的列表为Advertisements
),以便给出{{ 1}}我可以确定它是否属于Advertisement
(出于安全原因)。
似乎跨界关注对我的申请做出了设计决定,我不确定这是好事。
另外,我不知道使用双向关系的缺点是什么。
有人可以评论和建议吗?
答案 0 :(得分:1)
让我试着用一个例子回答这个问题:
@Entity
public clas Account {
@OneToMany(mappedBy = "account") // is mappedBy really necessary ?
private List<Advertisements> advertisements;
}
单向缺点:
缺少mappedBy
属性会导致单向一对多关系,并产生由外键组成的附加连接表。这通常被视为JPA陷阱,并对数据库级别的性能产生负面影响(您有三个表而不是两个表)。
@Entity
public clas Advertisements {
@ManyToOne
@JoinColumn(name="ACCOUNT_ID")
private Account account; // is Account really necessary ?
}
双向缺点:
您可以从Advertisements
导航到Account
,因此就JPA而言,您可以访问单值关联路径"SELECT adv.account FROM Advertisements adv"
。假设您不希望因此可能会对JPA级别的安全性产生负面影响。