1

是否可以在某些 jboss 配置中使用 EntityManager 禁用缓存?

我会解释的。我有一些我们产品的最终“耳朵”,它通过休眠使用 EntityManager(类似这样,我是新手),我需要测试一些行为。对我来说,最简单的方法是直接在数据库中更改(删除、创建)实体的状态。但是在我这样做之后,应用程序仍然需要一段时间才能找到旧值。我读过一些用于实体管理器的 jboss 缓存。

所以,为了测试,我想禁用 EntityManager 缓存,但它不能在应用程序级别禁用,只能在 jboss 级别禁用。

简而言之:我需要应用程序总是重新加载实际的实体状态,因为它可以在数据库中与其他应用程序一起编辑。并且不可能在应用程序级别禁用缓存(hibernate.xml 和其他)

PS:jboss 4.2.3、ejb3、hibernate3

4

1 回答 1

1

您所指的缓存可能是PersistenceContext. 它不能被禁用。你只能调整它的范围。在 Java EE 环境中,持久化上下文的范围是默认的事务。因此,如果您需要一些更改立即生效,您可以将这些更改(包括获取相关实体)提取到一个单独的方法中,并对其进行注释以要求新的事务:

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

一旦方法返回,所有更改都将被提交。

您还可以使用 bean 管理的事务,这样您就可以自己控制提交。为此,使用@TransactionManagement( TransactionManagementType.BEAN )并使用注释您的 bean UserTransaction

@Resource
private UserTransaction tx;
...
tx.begin();
//do stuff
tx.commit();
于 2012-11-23T15:00:22.080 回答