Erro JPA

Tenho uma classe bean que referencia uma entidade.
Esse bean faz o relacionamento entre usuário e subArea.
Um usuário pode ter n subAreas.
E uma subArea pode pertencer a n usuários.
Sendo assim, minha classe ficou assim:

@Entity
@Table(name = "tbl_usuario_subarea")
public class UsuarioSubArea implements Serializable{

private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id_usuario_subarea")
	private Integer idUsuarioSubArea;
	
	@ManyToOne
	@JoinColumn(name = "id_usuario", referencedColumnName = "id_usuario")
	private Usuario usuario;
	
	@ManyToOne
	@JoinColumn(name = "id_subarea", referencedColumnName = "id_subarea")
	private SubArea subArea;

// getters and setters

O usuário escolhe as subAreas para o usuário e clica em salvar.
Daí eu criei uma lista de ids e um for para adicionar no banco.

for (int idSubArea : this.idSubAreaList) {
			this.usuarioSubArea.getSubArea().setIdSubArea(idSubArea);
			this.usuarioSubAreaDAO.salvarUsuarioSubArea(this.usuarioSubArea);
		}

Ele salva 1 registro e depois dá esse erro:

org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.editorasaraiva.repositoriodigital.entity.UsuarioSubArea

Alguém sabe por que está aparecendo esse erro?

blz cara, o que pode estar acontecendo é que vc esta salvando o mesmo usuarioSubArea, ou seja, quando vc salva o seu usuarioSubArea ele ganha o ID e quando vc tenta salvar novamente, como ele já esta com o ID ele levanta a excessao que o objeto esta detached. Voce precisa criar novos objetos usuarioSubArea e ir salvando no banco.

tipo:


for (int idSubArea : this.idSubAreaList) {  
        UsuarioSubArea usuarioSubArea = new UsuarioSubArea();
        //setar o usuario e a subarea e depois salvar
        usuarioSubArea.getSubArea().setIdSubArea(idSubArea);  
        this.usuarioSubAreaDAO.salvarUsuarioSubArea(usuarioSubArea);  
} 

mas olha, seria bom vc fazer um metodo em seu DAO que recebe uma lista de UsuarioSubArea e lá no seu dao vc salvar todos. Voce ganhara mais performance. Abrira uma transacao, salvara toda a lista de UsuarioSUbArea e depois fechar a transacao.

Era isso mesmo cordeiro.
Agora funcionou.

É uma boa que vc deu mesmo, de o metodo DAO receber a lista de usuarioSubArea.
Vou fazer isso.
Obrigado cara =))

Abraço