Oie a todos.
Estou tentando achar uma solução e não consegui ainda vejam. A idéia é recuperar uma lista de perfis(roles) e adicionar dentro de um usuário, as roles estão salvas, e ai salvar o usuário e numa tabela intermediária de N pra N com os respectivos códigos…
estou fazendo testes unitários na parte de negócios, ainda não estou executando em servidor web, não existe view ainda, meu método:
private Funcionario saveNewUser() {
// obtenho um usuário pra teste
Funcionario user = getUser();
// obtenho lista de regras
List<Authority> role = repository.listAllAuthorities();
/*for(int x = 0; x < role.size(); x++){
role.set(x, repository.save(role.get(x)));
}*/
// seto no usuário as regras
user.setRole(role);
repository.save(user);
assertNotNull(user);
return user;
}
eu consigo salvar normalmente um usuário SEM uma(s) Authority, mas quando tento salvar COM uma Authority acontece:
javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.siac.domain.Authority
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
já vi que esse problema é quando a entidade não está mais gerenciada pelo hibernate, minhas transações estão a cargo do spring, então eu debuguei(se escreve assim!? :roll:) e vi que quando obtenho a lista aqui:
List<Authority> role = repository.listAllAuthorities();
minha EntityManager tem um id, e na hora de repository.save(user);
tem outro id, ou seja, transações diferentes, mas se isto está a cargo do spring como faço isso usando a mesma transação?
vejam a parte comentada, tentei fazer um merge em cada objeto da lista, mas como é em outra transação, não adiantou…
meu DAO tem essa parte principal:
@Transactional
public class GenericDAO<PersistenceObject, IDType extends Serializable> implements DAO<PersistenceObject, IDType> {
@PersistenceContext
protected EntityManager em;
...
obrigada, Carol.