Bom dia pessoal, tenho uma entidade tipoProtocolo,tipoDocumento que se relacionam N:N através da tabela tipodocumentotipoprotocolo;
o que deveria acontecer era, escolho o tipoProtocolo, associo os tiposDocumentos, e ao atualizar o tipoProtocolo, ele gravar na tabela tipodocumentotipoprotocolo, ou seja, as alterações deveriam ser só em tipodocumentotipoprotocolo, só q está acontecendo o seguinte: quando atualizo, 2 campos boolean do registro de tipoProtocolo são apagados, são inserido novos registros(os que foram associados) na tabela tipoDocumentos, além de gravar na tabela tipodocumentotipoprotocolo(correto). Segue abaixo as entidades:
[code]@Entity
public class TipoProtocolo implements Serializable {
private static final long serialVersionUID = 1L;
// ATRIBUTOS
private Long idTipoProtocolo;
private String descricao;
private Boolean ativo;
private Boolean rotaLivre;
//RELACIONAMENTOS UM PARA MUITOS
private List<Protocolo> protocolos;
//RELACIONAMENTOS MUITOS PARA MUITOS
private List<TipoDocumento> tiposDocumentos;
// CONSTRUTORES
// Construtor Padrão
public TipoProtocolo() {
}
public TipoProtocolo(Long idTipoProtocolo, String descricao) {
this.idTipoProtocolo = idTipoProtocolo;
this.descricao = descricao;
}
//GETTERS E SETTERS
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getIdTipoProtocolo() {
return idTipoProtocolo;
}
public void setIdTipoProtocolo(Long idTipoProtocolo) {
this.idTipoProtocolo = idTipoProtocolo;
}
public Boolean getAtivo() {
return ativo;
}
public void setAtivo(Boolean ativo) {
this.ativo = ativo;
}
public Boolean getRotaLivre() {
return rotaLivre;
}
public void setRotaLivre(Boolean rotaLivre) {
this.rotaLivre = rotaLivre;
}
@Column(length = 80)
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@OneToMany(mappedBy = "tipoProtocolo")
public List<Protocolo> getProtocolos() {
if (this.protocolos == null) {
this.protocolos = new ArrayList<Protocolo>();
Hibernate.initialize(protocolos);
}
return protocolos;
}
public void setProtocolos(List<Protocolo> protocolos) {
this.protocolos = protocolos;
}
@ManyToMany(cascade={CascadeType.MERGE })
@JoinTable(name = "tipodocumentotipoprotocolo", joinColumns = {
@JoinColumn(name = "idTipoProtocolo",
referencedColumnName = "idTipoProtocolo")},
inverseJoinColumns = {
@JoinColumn(name = "idTipoDocumento",
referencedColumnName = "idTipoDocumento")
})
public List<TipoDocumento> getTiposDocumentos() {
return tiposDocumentos;
}
public void setTiposDocumentos(List<TipoDocumento> tiposDocumentos) {
this.tiposDocumentos = tiposDocumentos;
}
[/code]
[code]@Entity
public class TipoDocumento implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
// ATRIBUTOS
private Long idTipoDocumento;
private String descricao;
// RELACIONAMENTOS MUITOS PARA MUITOS
private List<TipoProtocolo> tiposProtocolos;
// CONSTRUTORES
// Construtor Padrão
public TipoDocumento() {
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getIdTipoDocumento() {
return idTipoDocumento;
}
public void setIdTipoDocumento(Long idDocumento) {
this.idTipoDocumento = idDocumento;
}
@Column(length = 100, nullable = false)
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@ManyToMany(mappedBy = "tiposDocumentos")
public List<TipoProtocolo> getTiposProtocolos() {
return tiposProtocolos;
}
public void setTiposProtocolos(List<TipoProtocolo> tiposProtocolos) {
this.tiposProtocolos = tiposProtocolos;
}
[/code]
[code]@ManagedBean(name = “documentoProtocoloController”)
@ViewScoped
public class DocumentoProtocoloController implements Serializable {
.
.
.
private void prepareAdicionar() {
listaTiposDocumentos = tipoProtocolo.getTiposDocumentos();
List source = tipoDocumentoDao.listPesq(“SELECT t FROM TipoDocumento t ORDER BY t.descricao”);
List target = new ArrayList();
if (listaTiposDocumentos != null && listaTiposDocumentos.size() > 0) {
for (TipoDocumento td : listaTiposDocumentos) {
target.add(td);
}
}
tiposDocumentos = new DualListModel(source, target);
this.setCurrentState(StateConstante.ADICIONAR_STATE);
}
/**
* Adicionar
*/
public void adicionar() {
tipoProtocolo.setTiposDocumentos(tiposDocumentos.getTarget());
tipoProtocoloDao.atualizar(tipoProtocolo);
FacesUtils.mensInfo("Cadastro de Documentos efetuado com sucesso!");
prepareAdicionar();
}
}
[/code]