java - Spring-Data-Jpa 保存: Related entities saved as null which are not

标签 java hibernate spring-data-jpa

我有一个实体时间表:

@Entity @Table(name = TableUtils.TIMETABLE)public class Timetable {

private static final long serialVersionUID = -1307879048598194633L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = ColumnUtils.ID)
private long id;

@OneToMany(mappedBy = "timetable", cascade = {CascadeType.REMOVE, CascadeType.PERSIST})
private List<TimetableCell> timetableCells;

public List<TimetableCell> getTimetableCells() {
    return timetableCells;
}

public void setTimetableCells(List<TimetableCell> timetableCells) {
    this.timetableCells = timetableCells;
}
}

和一个实体 timetableCell:

@Entity
@Table(name = TableUtils.TIMETABLE_CELL)
public class TimetableCell extends AbstractElement {

private static final long serialVersionUID = -8083688091896353882L;

@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = ColumnUtils.WEEK_DAY_ID, nullable = false)
private WeekDay weekDay;

@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = ColumnUtils.LESSON_HOUR_ID, nullable = false)
private LessonHour lessonHour;

@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = ColumnUtils.TIMETABLE_ID, nullable = false)
private Timetable timetable;

...
}

首先,我使用 weekDay 和 LessonHours 创建时间表单元格。在我将此列表设置为时间表并尝试保存之后。但是所有时间表单元格都保存为 null weekDay 和 null LessonHour。 我调试了它。在保存之前,所有字段也已设置。

timetableRepository.save(timetable);

调试结果如下

最佳答案

1) timetableCells 仅标记有这些级联类型:

@OneToMany(mappedBy = "timetable", cascade = {CascadeType.REMOVE, CascadeType.PERSIST})

2) 周和小时部门只有这个:

@ManyToOne(cascade = CascadeType.PERSIST)

3) 如果你通过Timetable来保存这里的方法并且之前已经持久化了:

timetableRepository.save(timetable);

Spring Data JPA 不会调用persist,而是调用merge

这可能就是级联不起作用的原因。如果将此添加到您的配置中,您可能会得到所需的东西:

cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE})

关于java - Spring-Data-Jpa 保存: Related entities saved as null which are not,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56405710/

相关文章:

java - 迭代Java时从数组中删除对象

java - 如何序列化一组枚举?

java - 为什么 Hibernate Session 会有这样的行为

spring - 在 spring boot 中使用 pageable 获取和删除对象

java - 如何安全地读取可能是二进制的文本文件?

java - 避免在 Java 8 stream reduce 方法中使用全局变量

mysql - EclipseLink:连接池和 native 查询

spring-boot - 无法使用 Mockito 模拟 Spring-Data-JPA 存储库

java - 使用 Project Reactor 递归 react 流

java - 如何扩展内置的 Hibernate Validator ConstraintValidator