正如我在本文和我的书《高性能Java持久性》中所解释的那样,您绝对不应使用单向
@OneToMany注释,因为:
- 它生成效率低下的SQL语句
- 它创建了一个额外的表,这增加了数据库索引的内存占用量
现在,在您的第一个示例中,双方都拥有该关联,这很糟糕。
虽然
@JoinColumn可以让
@OneToMany负责这一方面的一方,但绝对不是最佳选择。因此,请始终使用侧面的
mappedBy属性
@OneToMany。
public class User{ @oneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="user") public List<APost> aPosts; @oneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="user") public List<BPost> bPosts;}public class BPost extends Post { @ManyToOne(fetch=FetchType.LAZY) public User user;}public class APost extends Post { @ManyToOne(fetch=FetchType.LAZY) public User user;}


