首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在find()之前不刷新Hibernate会导致实体为空(使用jpa2的JBoss AS7容器管理的emf )

在find()之前不刷新Hibernate会导致实体为空(使用jpa2的JBoss AS7容器管理的emf )
EN

Stack Overflow用户
提问于 2012-06-28 13:43:22
回答 1查看 698关注 0票数 0

我将应用程序的实体管理器工厂从spring管理切换到容器管理,结果遇到了问题。在创建实体时,有时我必须在最初创建它的同一事务中查询它,然后才能在结束时自动刷新它。在spring中,实体管理器将(我相信)在运行find之前自动刷新上下文,并能够返回正确的对象,但在jboss中,find方法返回null。

下面是这个问题的一个示例:

代码语言:javascript
复制
@PersistenceContext
private EntityManager entityManager;

private void test(){
    Person person = new Person("firstname", "lastname", "email", "user", "pass", Person.PersonType.admin);
    entityManager.persist(person);
    assert person.getId() != null;
    Person person2 = entityManager.find(Person.class, person.getId());
    assert person2 != null; //fail in jboss, ok in Spring
}

如果我试图在persist()find()方法之间添加一个entityManager.flush()调用,jboss就会抛出一个javax.persistence.TransactionRequiredException: no transaction is in progress错误,而不管我是否在运行测试的方法/类周围抛出了@Transactional注释。

我的persistence.xml文件设置了<property name="org.hibernate.FlushMode" value="auto"/>,但它似乎不起作用。

我是否遗漏了一些配置属性来告诉jboss在运行Find之前将其上下文刷新到数据库?或者我的语句排序不正确?

我已经把我的persistence.xmlmy-ds.xml文件放在粘贴箱里了。

谢谢你的帮助。

编辑

已解决。请参阅下面的评论

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-08 07:23:26

在上传我的spring-data.xml之后不久,我意识到我忘记了bean。添加之后,@Transactional标记按预期工作,问题就解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11238662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档