JPA实体和关系OneToMany,ManyToOne,ManyToMany-良好实践

通过分析一些教程,我发现在实体类中使用OneToMany,ManyToOne,ManyToMany注释定义Java对象和集合关系的实践有所不同。我对此有两个疑问:

  1. 我应该使用哪种排序规则:集合还是列表?

例如:

private Set<Employee> employees;

要么

private List<Employee> employees;
  1. 我应该在实体中创建对象吗?

例如:

private Set<Employee> employees;

要么

private Set<Employee> employees = new HashSet<>();

当我创建一个新对象时,第二个解决方案更好,因为使用员工集合时不会收到NullPointerException,但是从数据库中获取一个对象时,我会在创建新对象时创建两个对象实体,并在调用setEmplyees时排名第二。

在这种情况下,最佳做法是什么?

评论
  • 洛可可
    洛可可 回复

    列表与集合

    您可以根据所需的行为进行选择:

    • list:通常保证顺序(取决于基础实现,即ArrayList),例如,尊重从DB加载的记录的顺序
    • 设置:不保证顺序,但不允许重复

    初始化集合

    两种情况都很好。

    如果未定义(空),那么当您自己创建容器对象的实例时,需要注意可能的NPE。 当对象被JPA加载时,它最终将包含一个非null值。