mysql - 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;
...
}
我对休眠有点陌生,通过向版本添加更改日志,我被困在一个空指针中。我必须更改什么才能存档关系?
非常感谢到目前为止:)
解决方案
那是因为 changeLogEntites List 没有初始化。
你应该在声明中初始化它
@OneToMany(mappedBy = "version", cascade=CascadeType.ALL, fetch = FetchType.EAGER)
public List<ChangeLogEntity> changeLogEntities = new ArrayList<>();
推荐阅读
- javascript - 如何捕获具有相同数据属性的多个 div 的文本?
- ios - 如何使用 Photos 框架从 iOS 上的相机胶卷中获取最新照片?
- python - 如何在 python 海龟图形中更改海龟的 Hitbox 大小?
- r - 如何从我的数据框中仅选择无序因子?
- javascript - 在 NOSQL 数据库中存储 HTML?
- flutter - 如何在 Flutter 的 App bar 内添加 texfield?
- mediawiki - 生成输入字符串的加密哈希值的 Mediawiki 扩展?
- php - 在列表中查找特定数字并回显包含该数字的行
- javascript - D3.js 无法更新组中的现有元素
- postgresql - 在 PostgreSQL 9.4 上计算两个小时之间的差异