【问题标题】:Foreign keys on Insert with Struts2 / Hibernate使用 Struts2 / Hibernate 插入外键
【发布时间】:2011-10-04 13:39:20
【问题描述】:

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

文件添加.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”并将其插入我的表客户端(字段“coordonnees_id”=>我的 FK)。

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

谢谢大家的帮助:)

【问题讨论】:

  • 如果您正确设置了对象和映射,Hibernate 应该注意确保在插入对象图时所有外键都设置正确。
  • 嗨 cdeszaq,这是我的问题:请问如何正确映射这些元素?我是该技术的新手:/。这是在我的“Patient.hbm.xml”文件中吗?谢谢你的回答

标签: hibernate struts2 foreign-keys


【解决方案1】:

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

【讨论】:

  • 目前,我这样做: session.save(coordonnees); client.setCoordonnees(coordonnees); session.save(客户端);我可以处理它,但是,有没有办法自动做到这一点,或者这是唯一的方法?谢谢你的回答unixorn
猜你喜欢
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 2017-11-18
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多