Fala pessoal, tudo bem?
estou tentando persistir dois objetos que tem um relacionamento de N X M da seguinte maneira:
@Entity
@Table(name = "P_PERMISSOES")
public class Permissoes implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ID_PERMISSAO", nullable = false)
private Integer idPermissao;
@Column(name = "PAGINA", nullable = false)
private String pagina;
private String descricao;
@ManyToMany
@JoinTable(name="P_PADRAO_ACESSO_PERMISSAO",
inverseJoinColumns={
@JoinColumn(name="ID_PADRAO_ACESSO")},
joinColumns={
@JoinColumn(name="ID_PERMISSAO")})
private List<PadroesAcesso> padroesAcesso;
//getters e setters omitidos
}
@Entity
@Table(name = "P_PADRAO_ACESSO")
public class PadraoAcesso implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ID_PADRAO_ACESSO", nullable = false)
private Integer idPadraoAcesso;
@Column(name = "DESCRICAO", unique=true)
private String descricao;
@ManyToMany(mappedBy="padroesAcesso", cascade= {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
private List<Permissoes> permissoes;
//getters e setters omitidos
}
O código a seguir é onde eu armazenando o objeto
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class PadraoAcessoBean implements PadraoAcessoLocal {
@PersistenceContext(unitName="protocoloPU")
private EntityManager em;
......
public void insert(PadraoAcesso pa, Permissoes[] permissoes){
List<Permissoes> p = new ArrayList<Permissoes>();
for(int i =0; i < permissoes.length; i++){
Permissoes permissao = em.find(Permissoes.class, permissoes[i].getIdPermissao());
p.add(permissao);
}
pa.setPermissoes(p);
em.persist(pa);
}
.....
}
esse código insere tanto os registros da tabela P_PADRAO_ACESSO quanto da tabela P_PADRAO_ACESSO_PERMISSAO normalmente, o problema é que quanto eu tento inserir um novo registro ele insere na tabela P_PADRAO_ACESSO mas na tabela de associação (P_PADRAO_ACESSO_PERMISSAO) é como se ele apagasse tudo o que ja estava armazenado na mesma e armazenasse somente as informações do novo registro.
Alguem tem alguma idéia de como resolver isso?
Desde ja obrigado!!!
