Bonjour, j'ai une entity DataSurvey possèdant un relation oneToMany avec une entity DataComponent lorsque je persiste mon DataSurvey avec un DataComponent, je me retrouve bien avec un DataSurvey inséré et un DataComponent inséré seulement ce dernier n'a pas de valeur au niveau de SurveyID... Est-ce normal?

Survey.java
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
48
49
50
 
@Entity
@Table(name="survey")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="surveyType")
public abstract class Survey implements Serializable  {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "surveyId", nullable = false)
    protected Long id;
 
    @Column(name="surveyName")
    private String name;
 
 
 
 
    public Long getId() {
        return id;
    }
 
    public void setId(Long id) {
        this.id = id;
    }
 
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
 
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
 
    @Override
    public String toString() {
        return "Survey id: " + getId() + " name: " + getName();
    }
 
    /**
     * @return the components
     */
 
}
DataSurvey.java
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
 
@Entity
@DiscriminatorValue("DATASURVEY")
 
//essayer @overdir
public class DataSurvey extends Survey {
 
   // @OneToMany(mappedBy = "dataSurvey",cascade=CascadeType.ALL)
 
    @OneToMany(mappedBy = "dataSurvey",cascade=CascadeType.ALL)
    private List<DataComponent> components =new ArrayList<DataComponent>();
 
     public List<DataComponent> getComponents() {
        return components;
    }
 
}
Component.java
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
 
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Component implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    @Column(name = "id", nullable = false)
    private Long id;
    @Column(name="compName")
    private String name;
    @Column(name="compValue")
    private String value;
    private ComponentType type;
 
 
}
DataComponent.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
@Entity
@Table(name="dataComponent")
 
public class DataComponent extends Component {
 
 
    @ManyToOne
    @JoinColumn(name="surveyId",referencedColumnName="surveyId")
   private DataSurvey dataSurvey;
 
 
}
Surveyservice.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
     @Transactional(readOnly=false,propagation = Propagation.REQUIRED)
        public void addDataComponent(DataSurvey dataSurvey, DataComponent dataComponent){
            dataSurvey.getComponents().add(dataComponent);
            this.basicDao.persist(dataSurvey);
 
        }
Si j'exécute l'insertion ci-dessous:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
   DataSurvey ds = new DataSurvey();
      ds.setName("Salut");
 
      //surveyService.persistEvent(ds);
     DataComponent dc = new DataComponent();
 
      surveyService.addDataComponent(ds, dc);
Je me retrouve bien avec un enregistrement dans chaque table mais sans le surveyId renseigné de la table Datacomponent...

Est-ce un comportement normal?