小编use*_*037的帖子

JPA/Hibernate在EJB/Seam环境中的提交时不发出UPDATE

我有一个使用JBoss 7的Seam 3沙箱应用程序,Hibernate作为默认的JPA实现,以及作为Web前端的JSF.

我有问题,默认情况下吞下SQL UPDATE.

我在会话范围内的有状态EJB维护一个扩展范围的EntityManager和一个实体,容器管理事务(需要新的)

  1. EntityManager被注入
  2. EJB使用EM加载实体并将其保存在字段中
  3. JSF应用程序访问EJB及其实体,更改String字段
  4. JSF应用程序在EJB中调用"Save"方法
  5. 在save()中,我检查,如果实体字段已更改 - >它已正确更改
  6. 我什么也没做,容器在save()完成后提交事务.
  7. 问题:没有对数据库执行SQL更新.

如果我通过以下方式扩展save():

a)entityManager.contains(entity)UPDATE按预期执行(结果为"true")

要么

b)entityManager.persist(entity)UPDATE按预期执行

问:据我所知,a)或b)都不需要规格,因为实体在整个过程中仍然受到管理.我不明白,为什么a)对储蓄有影响.我可以成像b)对保存有影响,但它不应该被要求,是吗?

欢迎任何解释.

这是我的EJB:

@Named
@ConversationScoped
@Stateful
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class LanguageBean {

    @PersistenceContext(type = PersistenceContextType.EXTENDED)
    private EntityManager em;
    @Inject
    private UserTransaction transaction;

    private Language value;

    @Inject
    Conversation conversation;

    public LanguageBean() {
        super();
    }

    @Begin
    public void selectLanguage(Long anId) {
        conversation.setTimeout(10 * 60 * 1000);
        if (anId != null) {
            value = em.find(Language.class, anId);
        }
    }

    @BeforeCompletion
    public void transactionComplete(){
        System.out.println("transactionComplete");
    }

    public …
Run Code Online (Sandbox Code Playgroud)

hibernate seam3 ejb-3.0 jpa-2.0 jboss7.x

5
推荐指数
1
解决办法
1148
查看次数

标签 统计

ejb-3.0 ×1

hibernate ×1

jboss7.x ×1

jpa-2.0 ×1

seam3 ×1