在一对多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吗?优缺点都有什么?
lineItems
ArrayList
JPA本身并不关心集合是否已初始化。当使用JPA从数据库中检索订单时,JPA将 始终 返回带有非空OrderLine列表的Order。
原因:因为一个订单可以有0行,1行或N行,并且最好用一个空的,一个大小或N个大小的集合进行建模。如果集合为空,则必须在代码中的所有位置进行检查。例如,如果列表为null,则此简单循环将导致NullPointerException:
for (OrderLine line : order.getLines()) { ... }
因此,即使对于新创建的实体实例,也总是要具有非null集合,以使该变量不变。这使得创建新订单的生产代码更安全,更清洁。这也使使用不来自数据库的Order实例的单元测试更安全,更干净。