Dans un projet spring boot 2 avec jpa, hibernate et postgres je tente de sauvegarder un objet qui a utilise un IdClass



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    @Embeddable
    public class EmbedddedSamplesKey implements Serializable {
 
        private Integer id;
        private int year;
        ...
    }
 
    @Entity
    @IdClass(EmbedddedSamplesKey.class)
    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    public class Samplings {
 
        @Id
        @GeneratedValue
        private Integer id;
 
        @Id
        private int year;
 
        @OneToMany(mappedBy = "sampling", cascade = CascadeType.PERSIST, orphanRemoval = true)
        private List<Samples> samples = new ArrayList<>();
 
        public void addSample(Samples sample) {
        samples.add(sample);
        sample.setSampling(this);
    }
 
    public void removeSample(Samples sample) {
        samples.remove(sample);
        sample.setSampling(null);
    }
 
        ...
    }
 
    @Entity
    public class Samples extends BaseEntity {
        @Id
        @SequenceGenerator(name = "samples_id_seq", sequenceName = "samples_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "samples_id_seq")
        private Integer id;
 
        @ManyToOne
        private Samplings sampling;
        ...
    }
Dans Sampling j'ai donc un composite key.
Dans cet objet j'ai une liste de Sample.

Dans la samples, il y a les champs

sampling_id
sampling_year

mais lors de la sauvegarde rien n'est mis dans ses champs

Je croyais que le orm allait remplir ses valeur

Le orm a généré dans la table samples
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
    ALTER TABLE samples
      ADD CONSTRAINT fkq5if151jgtlcy7yfp55ffvf47 FOREIGN KEY (sampling_id, sampling_year)
      REFERENCES samplings (id, year)
      ON UPDATE NO ACTION
      ON DELETE NO ACTION;
J'ai tenté de mettre

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    @ManyToOne
    @JoinColumns({
        @JoinColumn(name = "sampling_id", referencedColumnName = "id"),
        @JoinColumn(name = "sampling_year", referencedColumnName = "year")})
    private Samplings sampling;

même résultat