持久化后 Hibernate 集合为 NULL
Posted
技术标签:
【中文标题】持久化后 Hibernate 集合为 NULL【英文标题】:Hibernate collections are NULL after persist 【发布时间】:2018-09-18 21:00:16 【问题描述】:JPA 实体 Batch
与 OneToMany
有关系 Event
:
@OneToMany(mappedBy = "owningBatch")
private Set<Event> containingEvents;
并且Event
与Batch
具有多对一关系:
@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的主要内容,如果未能解决你的问题,请参考以下文章