2017-09-08 1 views
-1

Quelqu'un peut-il me guider? Je reçois reportFilter vide quand j'envoie une demande de facteur. Le champ 'Nom' est correctement défini MAIS le rapport Filtre est nul. Il me manque une annotation sur OneToMany? Je fais appel/api/sauvegarde qui prend l'objet ReportTemplate mais je ne reçois pas reportFilter Liste dans cet objetJava un à plusieurs persistent hashset

@Entity 
@Audited 
@XmlRootElement 
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "name")) 
@JsonIgnoreProperties(value = { "handler", "hibernateLazyInitializer" }) 
public class ReportTemplate { 
private String name; 
private String templateFormat; 
private Set<ReportFilter> reportFilter = new HashSet<>(); 

@NotNull 
public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

@OneToMany(mappedBy="reportTemplate") 
@JsonIgnore 
public Set<ReportFilter> getReportFilter() { 
    return reportFilter; 
} 

    public void setReportFilter(Set<ReportFilter> reportFilter) { 
    this.reportFilter = reportFilter; 
    } 
} 

@Entity 
@Audited 
@XmlRootElement 
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"column_1", "reportTemplate_id"})) 
@JsonIgnoreProperties(value = { "handler", "hibernateLazyInitializer" }) 
public class ReportFilter { 

private String column_1; 
private ReportTemplate reportTemplate; 

@NotNull 
public String getColumn_1() { 
    return column_1; 
} 

public void setColumn_1(String column_1) { 
    this.column_1 = column_1; 
} 

@ManyToOne 
@NotNull 
public ReportTemplate getReportTemplate() { 
    return reportTemplate; 
} 

public void setReportTemplate(ReportTemplate reportTemplate) { 
    this.reportTemplate = reportTemplate; 
} 
} 

demande Postman:

{ 
    "name": "Test-Report", 
    "reportFilter": [ 
     { 
      "filterColumn": "Reference Number", 
      "column_1": "A", 
      "columnValue": "HE222", 
     }, 
     { 
      "filterColumn": "Test Column", 
      "column_1": "B", 
      "columnValue": "1234", 
     } 
    ] 
} 
+2

Que pensez-vous de JsonIgnore? Voici sa documentation: https://fasterxml.github.io/jackson-annotations/javadoc/2.5/com/fasterxml/jackson/annotation/JsonIgnore.html. BTW, vos entités n'ont aucun ID. Ce n'est pas valide. –

Répondre

0

Votre problème se résout en supprimant @JsonIgone de ces morceau de code:

@OneToMany(mappedBy="reportTemplate") 
public Set<ReportFilter> getReportFilter() { 
    return reportFilter; 
} 

avec ce anntotaion vous dis JsonEncoderDecoder qui ignorent cette propriété lors de la conversion de l'objet JSON mise en veille prolongée à l'entité.

Aussi vous avez manqué @JoinColumn d'un côté de la relation entre deux entites. utiliser somthing comme ceci:

@ManyToOne 
@JoinColumn(name = "TEMPLATE_ID") 
@NotNull 
public ReportTemplate getReportTemplate() { 
    return reportTemplate; 
} 

vous aurez besoin pour définir l'entité propriétaire.

Et aussi toutes les entités MOST ont une colonne @Id pour la clé primaire.