使用Struts2 / Hibernate插入的外键

时间:2011-10-04 13:39:21

标签: hibernate struts2 foreign-keys

我是Struts 2 w / hibernate的新用户。 我有2个表:“客户”和“Coordonnees”(法语单词) 在我的表“Client”中,我有一个名为“coordonnees_id”的FK,它引用表“Coordonnees”中的字段“id” 我创建了一个这样的插入表单:

文件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>

File 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;
    }
}

文件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();
    }
}

在我的Client.hbm.xml文件中:

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

这是我的问题: 当我提交表单时,我想将数据插入表Client(当然......),表格“Coordonnees”(它工作正常),我想得到我刚从表Coordonnees创建的“id”并将其插入我的表Client(字段“coordonnees_id”=&gt;我的FK)。

struts2中有一个简单的选项吗?当然我可以在表Coordonnees的最后一次插入中执行选择查询,获取id并更新我的表Client ...但这不是重点,我希望Struts为我这样做(如果可能的话)。

谢谢大家的帮助:)

1 个答案:

答案 0 :(得分:0)

我认为持久化这两个对象应该在同一个事务中发生。您应该首先保持父级,即coordonnees,然后将其刷新以获取主键,然后在子对象中设置关系。然后坚持孩子。