我有这两个实体。
@Entity
public class Stammdaten {
@Id
@Column(nullable = false)
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "stammdaten" )
private List<Address> addresses;
}
@Entity
public class Address {
@Id
@Column(nullable = false)
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "stammdaten_id")
private Stammdaten stammdaten;
}
我正在尝试将它们保存为双向一对多关系。所以我这样做
public void create(){
stammdaten.getAddresses().add(homeAddress);
stammdaten.getAddresses().add(semesterAddress);
homeAddress.setStammdaten(stammdaten);
semesterAddress.setStammdaten(stammdaten);
addressService.save(homeAddress);
addressService.save(semesterAddress);
stammdatenService.save(stammdaten);
}
但这给了我错误java.lang.NullPointerException: null
。当我调试时,所有对象stammdaten
,homeAddress
和semesterAddress
都不是null。我认为配置一对多和多对一关系存在一些问题。但我无法理解。请帮忙。
当JVM加载类时,address字段默认初始化为null。因为你没有初始化它而你直接访问哪种情况会引发空指针异常。有这个问题的3个解决方案(可能更多)。
在声明例如,初始化它@OneToMany(fetch = FetchType.EAGER,mappedBy =“stammdaten”)private List addresses = new ArrayList <>();常见的做法。
创建默认构造函数并在其中初始化。不良做法,因为紧耦合
在客户端程序中创建List address = new ArrayList <>(),并使用该类的setter方法传递引用。良好的做法。