提交对数据库的更改
Committing changes to database
我有一个基于 EJB 的项目,我想将输入字段中的值提交到数据库。我从数据控件中拖出合并方法并将其作为按钮放置,但单击它没有任何效果。由于我是初学者,我找不到问题所在,所以如果您能帮助我或给我一些建议,我将不胜感激!
按钮的动作:
<af:button actionListener="#{bindings.mergeEntity.execute}" text="mergeEntity" disabled="#{!bindings.mergeEntity.enabled}" id="b1"/>
来自会话 bean 的代码:
private void commitTransaction()
{
final EntityTransaction entityTransaction = em.getTransaction();
if (!entityTransaction.isActive())
{
entityTransaction.begin();
}
entityTransaction.commit();
}
public <T> T mergeEntity(T entity)
{
entity = em.merge(entity);
commitTransaction();
return entity;
}
我试图拼凑你在评论中发布的代码片段,我发现你的代码有问题。
public <T> T mergeEntity(T entity) {
entity = em.merge(entity);
commitTransaction();
return entity;
}
private void commitTransaction() {
final EntityTransaction entityTransaction = em.getTransaction();
if (!entityTransaction.isActive()) { entityTransaction.begin();
} entityTransaction.commit();
}
您只在 merge
操作后调用了 commitTransaction
方法。在您的 commitTransition
内是唯一一次尝试您 start/begin 您的交易。这意味着,您的 merge
操作是在您的交易边界之外执行的。这是错误的。
应该是:
entityTransaction.begin();
entity = em.merge(entity);
entityTransaction.commit();
我有一个基于 EJB 的项目,我想将输入字段中的值提交到数据库。我从数据控件中拖出合并方法并将其作为按钮放置,但单击它没有任何效果。由于我是初学者,我找不到问题所在,所以如果您能帮助我或给我一些建议,我将不胜感激!
按钮的动作:
<af:button actionListener="#{bindings.mergeEntity.execute}" text="mergeEntity" disabled="#{!bindings.mergeEntity.enabled}" id="b1"/>
来自会话 bean 的代码:
private void commitTransaction()
{
final EntityTransaction entityTransaction = em.getTransaction();
if (!entityTransaction.isActive())
{
entityTransaction.begin();
}
entityTransaction.commit();
}
public <T> T mergeEntity(T entity)
{
entity = em.merge(entity);
commitTransaction();
return entity;
}
我试图拼凑你在评论中发布的代码片段,我发现你的代码有问题。
public <T> T mergeEntity(T entity) {
entity = em.merge(entity);
commitTransaction();
return entity;
}
private void commitTransaction() {
final EntityTransaction entityTransaction = em.getTransaction();
if (!entityTransaction.isActive()) { entityTransaction.begin();
} entityTransaction.commit();
}
您只在 merge
操作后调用了 commitTransaction
方法。在您的 commitTransition
内是唯一一次尝试您 start/begin 您的交易。这意味着,您的 merge
操作是在您的交易边界之外执行的。这是错误的。
应该是:
entityTransaction.begin();
entity = em.merge(entity);
entityTransaction.commit();