简体   繁体   English

SpringBoot 不会在实体中保存 Set

[英]SpringBoot does not save Set in entity

My TimeTrail class has a Set of TimeTrailStage.我的 TimeTrail 类有一组 TimeTrailStage。 After i do a save, if i query the object, the timetrail_id on stage is null.保存后,如果查询对象,舞台上的 timetrail_id 为空。 So the stages are empty.所以阶段是空的。 I do not know what i'm doing wrong.我不知道我做错了什么。 i have looked in to the OneToMany/ManyToOne relationship, but as far as i can see it's correct.我查看了 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;
}

Competition.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 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;

}

Stage.class舞台.class

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;
}

Database runs on Mysql, MySQL5InnoDBDialect.数据库运行在 Mysql、MySQL5InnoDBDialect 上。

You should try to use @MappedSuperclass over Competition class.您应该尝试在竞赛类上使用@MappedSuperclass Right now hibernate don't know how to map id (name) to database model.现在休眠不知道如何将 id(名称)映射到数据库模型。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM