小编典典

要初始化还是不初始化JPA关系映射?

hibernate

在一对多JPA关联中,将空关系初始化为空集合是否被视为最佳实践?例如。

@Entity
public class Order {

   @Id
   private Integer id;

   // should the line items be initialized with an empty array list or not?
   @OneToMany(mappedBy="order")
   List<LineItem> lineItems = new ArrayList<>();

}

在上面的示例中,最好将lineItems默认值定义为空ArrayList吗?优缺点都有什么?


阅读 242

收藏
2020-06-20

共1个答案

小编典典

JPA本身并不关心集合是否已初始化。当使用JPA从数据库中检索订单时,JPA将 始终 返回带有非空OrderLine列表的Order。

原因:因为一个订单可以有0行,1行或N行,并且最好用一个空的,一个大小或N个大小的集合进行建模。如果集合为空,则必须在代码中的所有位置进行检查。例如,如果列表为null,则此简单循环将导致NullPointerException:

for (OrderLine line : order.getLines()) {
    ...
}

因此,即使对于新创建的实体实例,也总是要具有非null集合,以使该变量不变。这使得创建新订单的生产代码更安全,更清洁。这也使使用不来自数据库的Order实例的单元测试更安全,更干净。

2020-06-20