J'ai 3 entités: Realestate , Realtor et l'entité associative RealestateRealtor . Un Realestate peut avoir plusieurs agents immobiliers et vice versa. La relation plusieurs-à-plusieurs a une entité supplémentaire RealestateRealtor avec un champ URL spécifique.
Question: Comment puis-je créer une référence de travail en utilisant @JsonIgnore, @JsonManaged etc ... afin que je puisse demander à un agent immobilier ayant tous ses enfants Realestate et dans une autre demande un Realestate ayant tous ses enfants Realtor sans paralyser l'un d'eux ou être impossible d'enregistrer en raison d'une entité non définie en raison de l'ignorance de la désérialisation.
Agent immobilier:
@Entity
@Table(name="realtor",uniqueConstraints={@UniqueConstraint(name = "uniquerealtor", columnNames = {"name", "streetname", "housenumber", "housenumberaddition", "cityname"})})
public class Realtor {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer idrealtor;
@NotEmpty
@Column(length = 100)
private String name;
@NotEmpty
private String streetname;
@NotNull
private Integer housenumber;
@Column(length = 5)
private String housenumberaddition;
@NotEmpty
private String cityname;
@OneToMany(mappedBy = "realtor", cascade = CascadeType.ALL)
@JsonBackReference(value = "realestateref")
private Set<RealestateRealtor> realestaterealtor = new HashSet<RealestateRealtor>();
public Integer getIdrealtor() {
return idrealtor;
}
public void setIdrealtor(Integer idrealtor) {
this.idrealtor = idrealtor;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStreetname() {
return streetname;
}
public void setStreetname(String streetname) {
this.streetname = streetname;
}
public Integer getHousenumber() {
return housenumber;
}
public void setHousenumber(Integer housenumber) {
this.housenumber = housenumber;
}
public String getHousenumberaddition() {
return housenumberaddition;
}
public void setHousenumberaddition(String housenumberaddition) {
this.housenumberaddition = housenumberaddition;
}
public String getCityname() {
return cityname;
}
public void setCityname(String cityname) {
this.cityname = cityname;
}
public Set<RealestateRealtor> getRealestaterealtor() {
return realestaterealtor;
}
public void setRealestaterealtor(Set<RealestateRealtor> realestaterealtor) {
this.realestaterealtor = realestaterealtor;
}
}
Immobilier:
@Entity
@Table(name="realestate",uniqueConstraints={@UniqueConstraint(name = "uniquerealestate",columnNames = {"streetname" , "housenumber", "housenumberaddition", "cityname"})})
public class Realestate {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer idrealestate;
@NotEmpty()
private String streetname;
@NotNull
private Integer housenumber;
@Column(length = 5)
@javax.validation.constraints.NotNull
private String housenumberaddition;
@NotEmpty()
private String cityname;
@OneToMany(mappedBy = "realestate", cascade = CascadeType.ALL)
@JsonManagedReference(value = "realestateref")
private Set<RealestateRealtor> realestaterealtor = new HashSet<RealestateRealtor>();
public Integer getIdrealestate() {
return idrealestate;
}
public void setIdrealestate(Integer idrealestate) {
this.idrealestate = idrealestate;
}
public String getStreetname() {
return streetname;
}
public void setStreetname(String streetname) {
this.streetname = streetname;
}
public Integer getHousenumber() {
return housenumber;
}
public void setHousenumber(Integer housenumber) {
this.housenumber = housenumber;
}
public String getHousenumberaddition() {
return housenumberaddition;
}
public void setHousenumberaddition(String housenumberaddition) {
this.housenumberaddition = housenumberaddition;
}
public String getCityname() {
return cityname;
}
public void setCityname(String cityname) {
this.cityname = cityname;
}
public Set<RealestateRealtor> getRealestaterealtor() {
return realestaterealtor;
}
public void setRealestaterealtor(Set<RealestateRealtor> realestaterealtor) {
this.realestaterealtor = realestaterealtor;
}
}
RealestateRealtor:
@Entity
@Table(name="realestaterealtor")
public class RealestateRealtor {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer idrealestaterealtor;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "idrealestate")
@JsonBackReference(value = "realestateref")
private Realestate realestate;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "idrealtor")
private Realtor realtor;
@Column(name = "realestateurl")
private String realestateurl;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "idrealestaterealtor", nullable = true)
private Set<Media> media = new HashSet<Media>();
public Integer getIdrealestaterealtor() {
return idrealestaterealtor;
}
public void setIdrealestaterealtor(Integer idrealestaterealtor) {
this.idrealestaterealtor = idrealestaterealtor;
}
public Realestate getRealestate() {
return realestate;
}
public void setRealestate(Realestate realestate) {
this.realestate = realestate;
}
public Realtor getRealtor() {
return realtor;
}
public void setRealtor(Realtor realtor) {
this.realtor = realtor;
}
public String getRealestateurl() {
return realestateurl;
}
public void setRealestateurl(String realestateurl) {
this.realestateurl = realestateurl;
}
public Set<Media> getMedia() {
return media;
}
public void setMedia(Set<Media> media) {
this.media = media;
}
}
Le code publié ne fonctionne que pour la demande Realestate , et non l'inverse. La demande de l' agent immobilier ne se montre pas ses enfants.
Qu'ai-je essayé sans succès:
Je n'ai pas essayé JSonViews, @JsonIdentityInfo ou un sérialiseur personnalisé
@Entity
@Table(name="realestate",uniqueConstraints={@UniqueConstraint(name = "uniquerealestate",columnNames = {"streetname" , "housenumber", "housenumberaddition", "cityname"})})
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "idrealestate")
public class Realestate {
@Entity
@Table(name="realtor",uniqueConstraints={@UniqueConstraint(name = "uniquerealtor", columnNames = {"name", "streetname", "housenumber", "housenumberaddition", "cityname"})})
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "idrealtor")
public class Realtor {
Cela a abouti à un résultat de Realestate avec tous les agents immobiliers, mais a également abouti à un résultat de Realtor avec tous les agents immobiliers et tous les agents immobiliers appartenant au Realesatet, ce dernier `` problème '' a été résolu en l'annulant dans le contrôleur. L'agent immobilier
Vous pouvez utiliser JSonViews
mais si vous avez une couche de service où la transaction se termine et une couche de contrôleur de repos, dans la couche de contrôleur de repos, vous pouvez interrompre la récursivité bidirectionnelle dans le code de contrôleur de repos .
Realestate
, puis dans le contrôleur de repos,realState.getRealestaterealtor().forEach(item -> item.setRealState(null)
RealestateRealtor
, puis dans le contrôleur de repos,realestateRealtor.getRealestate().setRealestateRealtor(null)
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots