JPA 是否为数据库中为空的集合属性返回“null”或空集合?

sle*_*ske 6 collections null jpa language-lawyer

如果我有一个包含集合字段的 JPA 实体,例如

public class Post {    
  // [...]
  @OneToMany
  private List<String> tags;
Run Code Online (Sandbox Code Playgroud)

相应的数据库模式通常包含一个单独的表来存储标签,其中每条记录包含一个标签和对“Post”表的外键引用。

现在,当我从没有标签的数据库中加载一个“发布”实体(即不存在相应的“标签”记录)时,它的值Post.tags是多少?它会被设置为null,还是一个空的List?或者这是未定义的?

我在 JPA 规范中找不到这个。


注意:这与如果关系中的表为空,Hibernate 是否返回 null 或空集合是相同的问题,仅适用于 JPA 规范,而不是专门用于 Hibernate。

我知道大多数 JPA 实现(至少 Hibernate 和 EclipseLink)将返回一个空集合 - 我对是否在任何地方指定这很感兴趣。

cri*_*zis 13

根据JPA 2.1 规范

如果从数据库中获取的实体的多值关系没有关联实体,则持久性提供程序负责返回一个空集合作为关系值。