持久化后 Hibernate 集合为 NULL

Posted

技术标签:

【中文标题】持久化后 Hibernate 集合为 NULL【英文标题】:Hibernate collections are NULL after persist 【发布时间】:2018-09-18 21:00:16 【问题描述】:

JPA 实体 BatchOneToMany 有关系 Event

@OneToMany(mappedBy = "owningBatch")
private Set<Event> containingEvents;

并且EventBatch 具有多对一关系:

@ManyToOne
@JoinColumn(name = "BATCH_ID")
private Batch owningBatch;

在创建新实例并将其持久化后,containingEvents 仍然是 NULL。 但是当我使用空的Set:

@OneToMany(mappedBy = "owningBatch")
private Set<Event> containingEvents = Sets.newHashSet();

然后在持久化之后,containingEvents 被 Hibernate 的 PersistentSet 替换。 我希望即使在第一种情况下也会发生这种替换。为什么没有发生?

DAO 由 Spring Data JPA 实现。

Spring Boot 2.0.4.RELEASE Spring Data JPA 2.0.4.RELEASE 休眠 5.2.17.Final 休眠 JPA 2.1 1.0.2.Final

【问题讨论】:

owningBatch 是否存在于 Event 类中?它用@JoinColumn 注释? 请分享实体和 daos。 我用请求的详细信息更新了原始问题。 【参考方案1】:

您需要在@OneToMany 注释中添加CascadeType,例如:

@OneToMany(mappedBy = "owningBatch", cascade = CascadeType.ALL)
private Set<Event> containingEvents;

而你Event 类必须包含:

@ManyToOne
@JoinColumn(name = "batch_id", referencedColumnName = "id")
private Batch owningBatch;

【讨论】:

@user1622058,你为什么使用persist方法?如果使用 SpringData,则只需要 JpaRepository。 我确实使用 Spring Data JPA,但 SimpleJpaRepository 在后台调用 entityManager.persist()。见github.com/spring-projects/spring-data-jpa/blob/…

以上是关于持久化后 Hibernate 集合为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

Java对象在Hibernate持久化层的状态

hibernate学习二:

Hibernate

hibernate中实体类对象的四种状态

hibernate 延迟加载

Hibernate之集合映射