我的代码:

String sql = SELECT * FROM users;

List<Users> users = entityManager.createNativeQuery(sql, Users.class);

for(Users i : users)
   entityManager.detach(i);


如何更换样板循环:

for(Users i : users)
   entityManager.detach(i);




这是一个简单的示例,但是假设每个对象都有20个所需的对象,那么它将看起来像这样:

for(Users i : users)
{
       entityManager.detach(i);
        for(Users y : i.getNeested())
        {
             entityManager.detach(y);
             for(Users y : i.getNames())
              ....
        }
}

最佳答案

自己在事务中执行查询。事务结束后,结果将不再附加到持久性上下文中。

简单的例子,不需要单独的分离。如果您正在进行交易,请确保使用REQUIRES_NEW,否则它们不会分离。

@Transactional(propagation=Propagation.REQUIRES_NEW)
@Override
public List<User> findUsers() {
    return em.createNativeQuery("SELECT * FROM users", User.class).getResultList();
}

关于java - JPA脱离结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41040300/

10-14 12:34
查看更多