0

我获得了具有 ManyToMany 的实体帐户到实体角色。

@Entity
public class Account {

    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
    private Long id;

    @ManyToMany(cascade= {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH}, fetch=FetchType.EAGER)
    @JoinTable(name="Account_Role")
    private Set<Role> roles;

    // getters, setters
}

当我尝试访问关系集合时,我得到 NullPointerException,因为角色为空:

Account account = new Account();
account.getRoles().size();

不应该注入一个空集roles吗?或者它是默认行为,我应该roles通过以下方式控制创建:

   private Set<Role> roles = new HashSet()<>;
4

1 回答 1

1

你刚刚创建了一个对象

Account account = new Account();

这不是由 JPA 管理的。您如何期望它不为空?

默认情况下,引用类型实例变量被赋值nullSet是引用类型。您应该Set自己创建(如您所建议的)。

private Set<Role> roles = new HashSet()<>;

EntityManager或者从 JPA实例中检索实体实例

Account account = entityManager.find(Account.class, 42);
于 2013-07-25T17:24:02.120 回答