Persistance en cascade complexe
Bonjour,
Je tente de faire une persistance en cascade de cet entité :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Entity
@Table(name = "operations")
public class Operation implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Integer seq;
private Character sens;
private Double montant;
@OneToOne(cascade = CascadeType.PERSIST)
private Compte compte;
// getters, setters constructor. |
En faisant la persistant que celui-ci.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Entity
@Table(name = "transactions")
public class Transaction implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String type;
private String description;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
private Set<Operation> operations;
// getters, setters constructor. |
Je tiens à ajouter que dans L'entité Operation, on a un OneToOne unidirectionnel avec une entité nommé compte qui lui même, est unidirectionnelle OneToOne avec TypeCompte.
Les voici donc.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @Entity
@Table(name="comptes")
public class Compte implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String libelle;
private Double solde;
@OneToOne(cascade = CascadeType.PERSIST)
private TypeCompte typeCompte;
private static final long serialVersionUID = 1L; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| @Entity
@Table(name="type_compte")
public class TypeCompte implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String libelle;
private String numero;
private static final long serialVersionUID = 1L; |
Ma question est, lorsque je persiste une entité transaction, ça m'indique que l'entité opération qui est détaché tente de persiter.
Alors que j'ai fait ceci.
Code:
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
| public void doVal(){
TypeCompte tc = new TypeCompte();
tc.setLibelle(compte.getValue());
tc.setNumero("512");
Compte c = new Compte();
c.setTypeCompte(tc);
c.setLibelle(compte.getValue());
c.setSolde(150d);
Operation o = new Operation(), o1 = new Operation();
o.setCompte(c);
o.setId(0l);
o.setSeq(Integer.parseInt(seq.getValue()));
o.setSens(sens.getValue().charAt(0));
o.setMontant(Double.valueOf(montant.getValue()));
Compte c1 = new Compte();
c1.setTypeCompte(tc);
c1.setLibelle("SGBS");
c1.setSolde(150d);
o1.setCompte(c1);
o1.setId(1l);
o1.setSeq(Integer.parseInt(seq.getValue()));
o1.setSens(sens.getValue().charAt(0));
o1.setMontant(Double.valueOf(montant.getValue()));
Set<Operation> set_o = new HashSet<Operation>();
set_o.add(o1);
set_o.add(o);
Transaction t = new Transaction();
t.setDescription("test transactions");
t.setType(transaction.getValue());
t.setOperations(set_o);
tf.create(t);
} |
Je sais plus quoi écrire...