最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - Spring boot - jakarta @ManyToMany @CollectionTable - Stack Overflow

programmeradmin1浏览0评论

I've a table like this

@Entity
@Table(name = "ORDINI")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Ordini
{
    @Id
    @Column(name = "idord")
    @Size(min=5,max=25,message = "{Size.Ordini.idord.Validation}")
    private String idord;

    @Column(name = "idutente")
    @Size(min=5,max=40,message = "{Size.Ordini.idutente.Validation}")
    private String idutente;

    @Column(name = "idanizzazione")
    @Size(min=5,max=35,message = "{Size.Ordini.idanizzazione.Validation}")
    @NotBlank(message = "{NotBlank.Ordini.descrizione.Validation}")
    private String idanizzazione;

    **@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, mappedBy = "ordine")
    @CollectionTable(name = "idsord", joinColumns = @JoinColumn(name = "idord", referencedColumnName = "idord"))
    @Valid
    private Set<Prodotti> listaProdotti = new HashSet<>();**

    @Column(name = "mailverificata")
    private boolean mailverificata;

    @Column(name = "pagamentoeseguito")
    private boolean pagamentoeseguito;

    @Temporal(TemporalType.DATE)
    @Column(name = "date")
    @NotNull(message = "{NotNull.Ordini.datacreazione.Validation}")
    private Date date;

    @Column(name = "codStat")
    private String codStat;

    @Column(name = "linkpagamento")
    private String linkpagamento;

}

I've a table like this

@Entity
@Table(name = "ORDINI")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Ordini
{
    @Id
    @Column(name = "idord")
    @Size(min=5,max=25,message = "{Size.Ordini.idord.Validation}")
    private String idord;

    @Column(name = "idutente")
    @Size(min=5,max=40,message = "{Size.Ordini.idutente.Validation}")
    private String idutente;

    @Column(name = "idanizzazione")
    @Size(min=5,max=35,message = "{Size.Ordini.idanizzazione.Validation}")
    @NotBlank(message = "{NotBlank.Ordini.descrizione.Validation}")
    private String idanizzazione;

    **@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, mappedBy = "ordine")
    @CollectionTable(name = "idsord", joinColumns = @JoinColumn(name = "idord", referencedColumnName = "idord"))
    @Valid
    private Set<Prodotti> listaProdotti = new HashSet<>();**

    @Column(name = "mailverificata")
    private boolean mailverificata;

    @Column(name = "pagamentoeseguito")
    private boolean pagamentoeseguito;

    @Temporal(TemporalType.DATE)
    @Column(name = "date")
    @NotNull(message = "{NotNull.Ordini.datacreazione.Validation}")
    private Date date;

    @Column(name = "codStat")
    private String codStat;

    @Column(name = "linkpagamento")
    private String linkpagamento;

}

and a table like this

@Entity
@Table(name = "PRODOTTI")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Prodotti
{
    @Id
    @Column(name = "codprod")
    @Size(min=5,max=20,message = "{Size.Prodotti.codprod.Validation}")
    private String codprod;

    @Column(name = "nomeprod")
    @Size(min=5,max=20,message = "{Size.Prodotti.nomeprod.Validation}")
    private String nomeprod;

    @Column(name = "descrizione")
    @Size(min=6,max=80,message = "{Size.Prodotti.descrizione.Validation}")
    @NotBlank(message = "{NotBlank.Prodotti.descrizione.Validation}")
    private String descrizione;

    @Column(name = "um")
    @NotBlank(message = "{NotBlank.Prodotti.um.Validation}")
    private String um;

    @Column(name = "codstat")
    private String codStat;

    @Column(name = "pz")
    @Max(value = 99, message = "{Max.Prodotti.pz.Validation}")
    @Min(value = 1, message = "{Min.Prodotti.pz.Validation}")
    private Integer pz;

    @Column(name = "pesonetto")
    @Max(value = 999, message = "{Max.Prodotti.pesonetto.Validation}")
    @DecimalMin(value = "0.01", message = "{Min.Prodotti.pesonetto.Validation}")
    private double pesonetto;

    @Column(name = "idstatoprod")
    @NotNull(message = "{NotNull.Prodotti.idstatoprod.Validation}")
    private String idstatoprod;

    @Column(name = "imgsrc")
    @NotNull(message = "{NotNull.Prodotti.imgSrc.Validation}")
    private String imgsrc;

    @ManyToOne
    @JoinColumn(name = "iva",  referencedColumnName = "idiva")
    @Valid
    private Iva iva;

    @ManyToOne
    @JoinColumn(name = "famassort", referencedColumnName = "id")
    @Valid
    private FamAssort famAssort;
    
    **@ManyToMany
    @CollectionTable(name = "idsord", joinColumns = @JoinColumn(name = "codprod", referencedColumnName = "codprod"))
    private Set<Ordini> ordine  = new HashSet<>();**

}

when i insert a product with postman with a body like this

{
        "idord": "000004",
        "idutente": "123stezza",
        "idanizzazione": "mygroup",
        **"listaProdotti": [
                  {
                    "codprod": "000201",
                    "nomeprod": "Muscoli",
                    "descrizione": "Muscoli seminati, coltivati e raccolti nel golfo di La Spezia.",
                    "um": "kg",
                    "codstat": null,
                    "pz": 2,
                    "pesonetto": 0.8,
                    "idstatoprod": "1",
                    "prezzo": 0.0,
                    "imgsrc": "img/prodotto1.jpg",
                    "famAssort": {
                        "id": 1,
                        "descrizione": "Molluschi"
                    },
                    "iva": {
                        "idIva": 3,
                        "descrizione": "IVA 22%",
                        "aliquota": 22
                    }}
        ]**,
        "mailverificata": true,
        "pagamentoeseguito": false,
        "date": "2025-02-24",
        "codStat": "pagato",
        "linkpagamento": ""
    }

the insertion have success but the table in photo enter image description here

{
        "idord": "000004",
        "idutente": "123stezza",
        "idanizzazione": "mygroup",
        **"listaProdotti": []**,
        "mailverificata": true,
        "pagamentoeseguito": false,
        "date": "2025-02-24",
        "codStat": "pagato",
        "linkpagamento": ""
    }

(also "listaProdotti": [], remains empty too) does not come filled and remains empty.. but i should want to see the associations here..

how can i manage to have this table manytomany filled? Anyone can help me? Where i'm wrong?

Share edited Mar 6 at 20:35 Stefano Giammori asked Mar 6 at 20:30 Stefano GiammoriStefano Giammori 16 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

SOLVED

with a non-owner variable like this

@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, mappedBy = "listaProdotti")
@JsonBackReference
private Set<Ordini> ordini;

and an owner variable like this

@ManyToMany
@Valid
private Set<Prodotti> listaProdotti = new HashSet<>();
发布评论

评论列表(0)

  1. 暂无评论