SpringBoot未将Set保存在实体中



我的TimeTrail类有一组TimeTrailStage。保存后,如果查询对象,则stage上的timetrail_id为null。所以舞台是空的。我不知道我做错了什么。我已经研究了OneToMany/ManyToOne的关系,但据我所知,这是正确的。

TimeTrail.class

package com.verhees.cm.model.competition;
import com.verhees.cm.model.stage.TimeTrialStage;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import java.util.Set;
@Entity
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@Getter
@Setter
public class TimeTrail extends Competition {
@OneToMany(mappedBy = "competitie")
private Set<TimeTrialStage> stages;
}

竞争.class

package com.verhees.cm.model.competition;
import lombok.*;
import lombok.experimental.SuperBuilder;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Size;
@Entity
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public abstract class Competition {
@Id
@Size(min = 3, max = 15)
private String name;
}

TimeTrailStage.class

public class TimeTrialStage extends Stage {
@ManyToOne
@JoinColumn(name="timetrail_id", nullable = false)
private TimeTrail competitie;
@ManyToMany
@JoinTable(
name = "team_stage",
joinColumns = @JoinColumn(name = "stage_id"),
inverseJoinColumns = @JoinColumn(name = "team_id"))
private List<Team> teams = new ArrayList<>();
@OneToMany(cascade = CascadeType.ALL)
private List<Score> scores;
@OneToMany(cascade = CascadeType.ALL)
private List<TimeTrialStagePrediction> predictions;
}

阶段级

package com.verhees.cm.model.stage;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
import static javax.persistence.GenerationType.IDENTITY;
@Entity
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
@Getter
@Setter
public abstract class Stage {
@Id
@GeneratedValue(strategy = IDENTITY)
private Long id;
private Date date;
}

数据库运行在Mysql、MySQL5InnoDB方言上。

您应该尝试使用@MappedSuperclass而不是Competition类。现在hibernate不知道如何将id(名称(映射到数据库模型。

您可以在这里找到示例/文档:https://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html

最新更新