JPA:分离附加的只读实体列表

JPA: Detach a list of attached read-only entities

查询后分离大型列表的实体是否有益,即为这些实体使用默认模式,如:

// Find all
for List<Device> devices = em.createNamedQuery("find.*.devices", Device.class).getResultList();

// Detach all
for (Device d : devices) {
  em.detach(d);
}

我们可以避免一些负面影响,例如错误地为被视为 "read only" 的实体更新数据库(可以保证)或节省内存。

如果您想在数据库中没有任何更新的情况下使用列表,您可以分离对象。

您有以下选择:

  1. 如果您正在使用程序化交易,请不要打开交易。请注意交易未开启:

    EntityManager em = EntityManagerFactory.createEntityManager();

    列表 personList = em.query()

  2. 将您的方法标记为不支持事务@TransactionAttribute(NOT_SUPPORTED)

  3. 如果您清除 EntityManager,您将分离所有实体:em.clear()