我正在使用Springboot和MySQL来制作API, 我现在遇到了一个问题,在网上找不到答案:
问题是在我下面的关联表"www.example.com"中,我try 用Lombok初始化getters和setters,但是当我使用@ Data时,我没有得到任何错误,但是当我用RecetteRepository findAll()时,我得到了一个数组的"etapes"为空,但是如果我在"EtapeRecette.java"手动设置getters和setters,它的工作都很好,同样,如果我使用@ Getters和@ Setters,有什么原因@ Data不工作?
我有三张桌子:
Recette.java
package org.microferme.charme.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Set;
@Data
@NoArgsConstructor
@Entity
@Table(name="Recette")
public class Recette {
@Id
private String id;
@Column(name = "nom")
private String nom;
@Column(name = "nb_personne")
private int nbPersonne;
@Column(name = "prix_par_personne")
private float prixParPersonne;
@OneToMany(mappedBy = "recette", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnoreProperties("recette")
private Set<MediaRecette> medias;
@OneToMany(mappedBy = "recette", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnoreProperties("recette")
private Set<StockUtile> ingredients;
@OneToMany(mappedBy = "recette", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnoreProperties("recette")
private Set<EtapeRecette> etapes;
public Recette(String nom, int nbPersonne, float prixParPersonne) {
//Si l'id n'est pas spécifié on prend la timestamp actuelle
Date date = new Date();
this.id = String.valueOf(new Timestamp(date.getTime()).getTime());
this.nom = nom;
this.nbPersonne = nbPersonne;
this.prixParPersonne = prixParPersonne;
}
public void addMedia(MediaRecette media) {
this.medias.add(media);
}
public void addIngredient(StockUtile ingredient) {
this.ingredients.add(ingredient);
}
public void addEtape(EtapeRecette etapeRecette) {
this.etapes.add(etapeRecette);
}
}
ETape.java.etape.java.
package org.microferme.charme.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Set;
@Data
@Entity
@Table(name = "Etape")
public class Etape {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "ordre")
private float ordre;
@Column(name = "duree")
private float duree;
@Column(name = "description")
private String description;
@ManyToOne
private Ustensile ustensile;
public Etape() {
}
public Etape(float ordre, float duree, String description, Ustensile ustensile) {
this.ordre = ordre;
this.duree = duree;
this.description = description;
this.ustensile = ustensile;
}
}
磁带接收器,它是接收器和磁带之间的关联表,以便具有多对多关系
package org.microferme.charme.model;
import jakarta.persistence.*;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.microferme.charme.model.embeddable.EtapeRecetteId;
@Entity
@Data
@Table(name = "EtapeRecette")
public class EtapeRecette {
@EmbeddedId
private EtapeRecetteId id;
@ManyToOne(cascade = CascadeType.ALL)
@MapsId("recetteId")
private Recette recette;
@ManyToOne(cascade = CascadeType.ALL)
@MapsId("etapeId")
private Etape etape;
public EtapeRecette() {
}
public EtapeRecette(Recette recette, Etape etape) {
this.id = new EtapeRecetteId(recette.getId(), etape.getId());
this.recette = recette;
this.etape = etape;
}
}