我处于这样一种情况,需要将我的JPA单向关系更改为双向关系(一个Account实体具有Advertisements列表),以便在给定Advertisement时我可以确定它是否属于一个账户(出于安全考虑)。
似乎一个横切关注点对我的应用程序强加了一个设计决策,我不确定这是好的。
此外,我不知道使用双向关系的缺点是什么。
请问有人能够评论和建议吗?
似乎一个横切关注点对我的应用程序强加了一个设计决策,我不确定这是好的。
此外,我不知道使用双向关系的缺点是什么。
请问有人能够评论和建议吗?
让我用一个例子来回答这个问题:
@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 ?
}
广告
导航到帐户
,因此在JPA方面,您可以访问单值关联路径"SELECT adv.account FROM Advertisements adv"
。假设您不想,因此可能会对JPA级别的安全性产生负面影响。
account
对象可以通过查询封装它的Advertisements
对象轻松访问。如果没有account
,这根本不可能。 我只能想象一种情况,当任何原因都应该禁止在那个方向上进行访问时(即广告不应该有关于使用它们的帐户的任何知识,就像汽车不应该有关于使用它们的驾驶员的任何知识) 。 - wypieprz