Hibernate NullPointerException同时将多个保存到一个相关对象

问题描述 投票:0回答:1

我有这两个实体。

@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。当我调试时,所有对象stammdatenhomeAddresssemesterAddress都不是null。我认为配置一对多和多对一关系存在一些问题。但我无法理解。请帮忙。

hibernate one-to-many many-to-one
1个回答
0
投票

当JVM加载类时,address字段默认初始化为null。因为你没有初始化它而你直接访问哪种情况会引发空指针异常。有这个问题的3个解决方案(可能更多)。

在声明例如,初始化它@OneToMany(fetch = FetchType.EAGER,mappedBy =“stammdaten”)private List addresses = new ArrayList <>();常见的做法。

创建默认构造函数并在其中初始化。不良做法,因为紧耦合

在客户端程序中创建List address = new ArrayList <>(),并使用该类的setter方法传递引用。良好的做法。

© www.soinside.com 2019 - 2024. All rights reserved.