为什么我们在休眠一对多关系中使用Set <Object>或List <Object>而不是HashSet <Object>或ArrayList <Object>?

时间:2019-08-12 07:18:13

标签: java hibernate collections one-to-many

当实体类中存在一对多关系时,我总是看到人们使用收集框架的接口。例如,如果作者写了许多书,那么它看起来像这样:

@OneToMany(mappedBy = "author")
private List<Book> books;

为什么不

@OneToMany(mappedBy = "author")
private ArrayList<Book> books;

@OneToMany(mappedBy = "author")
private Set<Book> books;

不是

@OneToMany(mappedBy = "author")
private HashSet<Book> books;

那为什么要使用接口而不是收集框架的实现?

1 个答案:

答案 0 :(得分:2)

推荐的方法是使用接口而不是具体类型,因为Hibernate在幕后注入了自己的实现(例如PersistenBagPersistentSet等),以提供懒惰的加载/脏检查和其他魔力。也结帐了this个答案。