JPA得到了分离的结果

时间:2016-12-08 13:08:13

标签: java mysql hibernate jpa spring-boot

我的代码:

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()) 
              ....
        }
}

1 个答案:

答案 0 :(得分:2)

单独在事务中执行查询。一旦交易结束,结果将不再附加到持久性上下文。

简单的例子,不需要单独拆卸。如果您正在进行交易,请务必使用REQUIRES_NEW,否则他们不会被分离。

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