首页 > 解决方案 > JPA Hibernate 双向关系以空指针结尾

问题描述

我有 2 个实体:版本和更改日志。一个版本有 N 个变更日志,一个变更日志有一个版本。

我的版本实体如下所示:

@Table(name="change_log_version")
@Entity
public class ChangeLogVersionEntity {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private long id;

   @Column(name="version")
   private String version;

   @Column(name="date")
   private LocalDateTime date;

   @OneToMany(mappedBy = "version", cascade=CascadeType.ALL, fetch = 
   FetchType.EAGER)
   public List<ChangeLogEntity> changeLogEntities;

   public void addChangeLog(ChangeLogEntity changeLogEntity) {
      this.changeLogEntities.add(changeLogEntity);

      changeLogEntity.setVersion(this);
  }

...

}

我的更改日志实体如下所示:

@Table(name="change_log")
@Entity
public class ChangeLogEntity {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private long id;

   @Column(name="description")
   private String description;

   @Column(name="added")
   private boolean isAdded;

   @Column(name="modified")
   private boolean isModified;

   @Column(name="deleted")
   private boolean isDeleted;

   @Column(name="public")
   private boolean isPublic;

   @Column(name="date")
   private LocalDateTime date;

   @ManyToOne(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
   @JoinColumn(name = "version_id")
   private ChangeLogVersionEntity version;
  ...
 }

我对休眠有点陌生,通过向版本添加更改日志,我被困在一个空指针中。我必须更改什么才能存档关系?

非常感谢到目前为止:)

标签: mysqlhibernatespring-bootjpa

解决方案


那是因为 changeLogEntites List 没有初始化。

你应该在声明中初始化它

@OneToMany(mappedBy = "version", cascade=CascadeType.ALL, fetch =  FetchType.EAGER)
public List<ChangeLogEntity> changeLogEntities = new ArrayList<>();

推荐阅读