编程语言
首页 > 编程语言> > java – 初始化或不初始化JPA关系映射?

java – 初始化或不初始化JPA关系映射?

作者:互联网

在一对多的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<>();

}

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

解决方法:

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

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

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

因此,最好通过始终拥有非null集合使其成为不变量,即使对于新创建的实体实例也是如此.这使得生产代码创建新订单更安全,更清洁.这也使得使用不是来自数据库的Order实例进行单元测试,更安全,更清洁.

标签:openjpa,java,jpa,hibernate,eclipselink
来源: https://codeday.me/bug/20191006/1859500.html