提交对数据库的更改

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