2015-11-23 137 views
0

变化我有一个基于EJB的项目,我要提交的输入字段到数据库中的值。我从数据控件中拖动合并方法,并将其作为一个按钮放弃,但点击它没有任何影响。我找不到哪里是错,因为我是初学者,所以如果你帮我或给我一些建议,我将非常感激!按钮的提交到数据库

操作:

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; 
} 
+2

也许,表现出一定的代码,以帮助大家了解你的问题更好。 – Ish

+0

- 这是的动作按钮 –

+0

私人无效commitTransaction(){ 最终EntityTransaction entityTransaction = em.getTransaction(); (!entityTransaction.isActive()){ entityTransaction.begin(); } entityTransaction.commit(); } –

回答

0

我试着拼凑你在评论中发布的代码片段,我看到一些你的代码错误:

<af:button actionListener="#{bindings.mergeEntity.execute}" text="mergeEntity" disabled="#{!bindings.mergeEntity.enabled}" id="b1"/> 

从会话bean代码。

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里面是尝试开始/开始交易的唯一时间。这意味着,您的merge操作在您的交易边界外执行。这是错误的。

它应该是:

entityTransaction.begin(); 
entity = em.merge(entity); 
entityTransaction.commit(); 
+0

谢谢你的回答! –

+0

没问题。如果您认为这是正确的答案,请接受它。 – Ish