2011-10-04 3 views
0

Je suis un nouvel utilisateur de Struts 2 w/hibernate. J'ai 2 tables: "Client" et "Coordonnees" Dans ma table "Client", j'ai un FK nommé "coordonnees_id", qui référence le champ "id" de la table "Coordonnees" J'ai créé un insert former comme ceci:Clés étrangères sur Insert avec Struts2/Hibernate

fichier add.jsp

<s:form method="post" action="create"> 
    <s:textfield cssClass="" label="Nom" name="client.nom" /> 
    <s:textfield cssClass="" label="Prénom" name="client.prenom" /> 
    .... 
    <s:textfield cssClass="" label="Email" name="coordonnees.email" /> 
    <s:textfield cssClass="" label="Adresse" name="coordonnees.adresse" /> 
    <s:submit value="Insert" /> 
</s:form> 

fichier ClientAction.java

private Client client; 
private ClientManager clientManager; 
private Coordonnees coordonnees; 
private CoordonneesManager coordonneesManager; 

public String create() { 

    client = getClient(); 
    coordonnees = getCoordonnees(); 

    try { 
     clientManager.insert(client); 
     coordonneesManager.insert(coordonnees); 
     return SUCCESS; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return ERROR; 
    } 
} 

fichier CoordonneesManager.java

public boolean insert(Coordonnees coordonnees) { 

    session = MyHibernateUtil.currentSession(); 
    tx = session.beginTransaction(); 
    try { 
     session.save(coordonnees); 
     log.info("Enregistrement de : " + getClass()); 
     return true; 
    } catch (Exception e) { 
     log.error(e); 
     return false; 
    } finally { 
     tx.commit(); 
     MyHibernateUtil.closeSession(); 
    } 
} 

Dans mon fichier Client.hbm.xml:

<many-to-one class="model.Coordonnees" fetch="select" name="coordonnees"> 
    <column name="coordoonnees_id"/> 
</many-to-one> 

Voici mon problème: Quand je soumets ma forme, je voudrais insérer des données dans le client de la table (bien sûr ...), dans la table "Coordonnees" (ça marche bien), et je voudrais obtenir le "id" que je viens de créer depuis la table Coordonnees et l'insérer dans ma table Client (champ "coordonnees_id" => mon FK).

Y a-t-il une option facile dans struts2 pour faire cela? Bien sûr je peux effectuer une requête select sur ma dernière insertion dans la table Coordonnees, obtenir l'id et mettre à jour ma table Client ... Mais ce n'est pas le point, je voudrais que Struts fasse ça pour moi (si c'est possible bien sûr).

Merci à tous pour votre aide :)

+0

Si vos objets et vos mappages sont configurés correctement, Hibernate doit veiller à ce que les clés étrangères soient correctement configurées lorsque vous insérez un graphique d'objet. – cdeszaq

+0

Salut cdeszaq, c'était ma question: comment puis-je cartographier correctement ces éléments? Je suis un novice avec cette technologie: /. Est-ce dans mon fichier "Patient.hbm.xml"? Merci pour vos réponses – Vince

Répondre

0

Je crois que la persistance de ces deux objets devrait se produire dans la même transaction. Vous devez d'abord conserver le parent, c'est-à-dire le coordonnees, puis le flasher pour obtenir la clé primaire, puis définir la relation dans l'objet enfant. Ensuite, persistez l'enfant.

+0

Pour l'instant, je fais ceci: session.save (coordonnees); client.setCoordonnées (coordonnees); session.save (client); Je peux m'en occuper, mais y a-t-il un moyen de le faire automatiquement ou est-ce le seul moyen? Merci pour votre réponse unixorn – Vince