我是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为我这样做(如果可能的话)。
谢谢大家的帮助:)
答案 0 :(得分:0)
我认为持久化这两个对象应该在同一个事务中发生。您应该首先保持父级,即coordonnees
,然后将其刷新以获取主键,然后在子对象中设置关系。然后坚持孩子。