Bonjour,

Je cherche le moyen d'effectuer une insertion dans deux tables différentes avec FSDS et hibernate.

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
class Livre {
 
public var idLivre:Number;
public var libelle:String;
public var arrayAuteur:ArrayCollection;
 
public Livre ();
}
 
class Auteur {
 
public var idAuteur:Number;
public var livre:Livre;
public var nom:String;
public Auteur();
 
public setLivre(livre:Livre){
this.livre=livre;
}
}
J'utilise HibernateAssembler. Du coté java j'ai le même type de classe. Actuellement je fait de cette manière :

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
var livreDS:DataSource;
var auteurDS:DataSource;
var itemLivre:ItemReference;
 
public function init() {
livreDS = new DataSource("livre");
livreDS.addEventListener(MessageFaultEvent.FAULT, faultHandler);
livreDS.addEventListener(MessageEvent.RESULT, resultHandler);
livreDS.addEventListener(DataConflictEvent.CONFLICT, conflictHandler);
livreDS.autoCommit = false;
 
auteurDS = new DataSource("auteur");
auteurDS.autoCommit = false;
}
 
public function resultHandler(e:ResultEvent) {
 
// Objet du livre nouvellement créé
var livre:Livre = itemlivre.result as Livre
AuteurModele.setLivre(livre);
auteurDS.createItem(AuteurModel);
auteurDS.commit();
}
 
public function ajouter() {
itemLivre = livreDS.createItem(LivreModele);
livreDS.commit();
}
Problème de cette méthode est que je fait d'abord un commit du livre puis je commit les auteurs. Du coup si un auteur plante je n'ai pas de rollback du livre (ce que je souhaiterait). Et si je charge la liste de mes auteurs dans mon livre alors Hibernate m'effectue un insert pour le livre, mais des update pour les auteurs (alors que mes auteurs n'existent pas dans mon cas). Avez vous une idée pour effectuer une insertion en un seul coup des deux objets (Livre et Auteur)?