java - Hibernate集合在持久化后为NULL

标签 java spring hibernate spring-boot jpa

JPA 实体 BatchEvent 具有 OneToMany 关系:

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

EventBatch有ManyToOne关系:

@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
Hibernate 5.2.17.Final
Hibernate JPA 2.1 1.0.2.Final

最佳答案

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

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

并且您的 Event 类必须包含:

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

关于java - Hibernate集合在持久化后为NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52394530/

相关文章:

java - Spring Boot日志文件相对于jar目录而不是启动目录

java - Spring 数据 : How to store enum list in mySQL database

java - Hibernate OneToMany 生成外键

hibernate - 替代grails多列唯一约束(乐观插入)

java - 我应该如何在棉花糖中添加权限请求?

java - 在 Swing 中取消表更新事件

java - 为什么 com.netflix.spectator.api.Counter 会产生 "normalized"值?

java - 如何从存储在列表中的对象中获取特定字段值的列表?

java - 无法在 Spring Boot 中拦截和操作 HttpServletResponse

java - Hibernate Annotations/JPA 映射集合