使用 Struts2/Hibernate 插入的外键

发布于 2024-12-08 00:47:45 字数 2082 浏览 0 评论 0原文

我是 Struts 2 w/ hibernate 的新用户。 我有 2 个表:“Client”和“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>

文件 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”=> my FK)。

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

谢谢大家的帮助:)

I'm new user of Struts 2 w/ hibernate.
I have 2 tables : "Client" and "Coordonnees" (french word)
In my table "Client", I have a FK named "coordonnees_id", that references field "id" from table "Coordonnees"
I created an insert form like this :

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

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

In my Client.hbm.xml file :

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

Here is my problem :
When I submit my form, I would like to insert data into table Client (of course ...), into table "Coordonnees" (it works fine), and I would like to get the "id" I just created from table Coordonnees and insert it into my table Client (field "coordonnees_id" => my FK).

Is there an easy option in struts2 to do that ? Of course I can perform a select query on my last insert in table Coordonnees, get the id and update my table Client ... But it's not the point, I would like Struts to do this for me (if it's possible of course).

Thank you all for your help :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不再见 2024-12-15 00:47:45

我相信持久化这两个对象应该发生在同一个事务中。您应该首先保留父对象,即坐标,然后刷新它以获取主键,然后在子对象中设置关系。后来还是坚持着孩子。

I believe that persisting these two objects should happen in the same transaction. You should first persists the parent i.e. the coordonnees then flash it to get the primary key and then set the relation in the child object. Afterwards persist the child.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文