Então tem o cascade no AssociadoParticipante pra salvar a UF, mas ela pode ser null na tabela AssociadoParticipante:
Aqui esta UF:
package br.gov.cvm.rfe.dominio.corporativo.entidades;
import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="SIC_UF")
@NamedQueries({@NamedQuery(name="findUfByDescricao", query="Select uf from Uf uf where uf.sgUf = ?1"),
@NamedQuery(name="findUfByEndereco", query="Select uf from Uf uf left join fetch uf.listaMunicipios municipio where municipio.cdMunicipio = ?1")})
public class Uf implements Serializable {
private static final long serialVersionUID = 1L;
public static final String QUERY_CONSULTA_UF_PELA_DESCRICAO = "findUfByDescricao";
public static final String QUERY_CONSULTA_UF_PELO_ENDERECO = "findUfByEndereco";
private String sgUf;
private String descricao;
private List<Municipio> listaMunicipios;
private List<AssociacaoParticipante> listAssocPartic;
public void setSgUf(String sgUf) {
this.sgUf = sgUf;
}
@Id
@Column(name="SG_UF")
public String getSgUf() {
return sgUf;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@Column(name="DS_UF")
public String getDescricao() {
return descricao;
}
public void setListaMunicipios(List<Municipio> listaMunicipios) {
this.listaMunicipios = listaMunicipios;
}
@OneToMany(mappedBy="uf", fetch=FetchType.LAZY)
public List<Municipio> getListaMunicipios() {
return listaMunicipios;
}
@OneToMany(mappedBy="uf", fetch=FetchType.LAZY)
public List<AssociacaoParticipante> getListAssocPartic() {
return listAssocPartic;
}
public void setListAssocPartic(List<AssociacaoParticipante> listAssocPartic) {
this.listAssocPartic = listAssocPartic;
}
}
AssociacaoParticipante
/**
*
*/
package br.gov.cvm.rfe.dominio.corporativo.entidades;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
* @author rafaela.adriana
*
*/
@Entity
@Table(name="SIC_ASSOC_PARTIC")
public class AssociacaoParticipante implements Serializable {
private static final long serialVersionUID = 1L;
private AssociacaoParticipantePk pk;
private Long nrPfPjAssociado;
private Date dtFimAssociacao;
private String cdTpPfPjAssociado;
private String nomeAssociado;
private String logradouroAssociado;
private String complementoAssociado;
private String bairroAssociado;
private Long cep;
private String dddTelefoneAssociado;
private Long nrTelefoneAssociado;
private String dddFaxAssociado;
private Long nrFaxAssociado;
private String emailAssociado;
private Municipio municipio;
private Participante participante;
private Uf uf;
public void setPk(AssociacaoParticipantePk pk) {
this.pk = pk;
}
@EmbeddedId
public AssociacaoParticipantePk getPk() {
if(pk == null)
pk = new AssociacaoParticipantePk();
return pk;
}
public void setNrPfPjAssociado(Long nrPfPjAssociado) {
this.nrPfPjAssociado = nrPfPjAssociado;
}
@Column(name="NR_PF_PJ_ASSOC_PARTIC")
public Long getNrPfPjAssociado() {
return nrPfPjAssociado;
}
public void setDtFimAssociacao(Date dtFimAssociacao) {
this.dtFimAssociacao = dtFimAssociacao;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name="DT_FIM_ASSOC_PARTIC", columnDefinition="smalldatetime")
public Date getDtFimAssociacao() {
return dtFimAssociacao;
}
public void setCdTpPfPjAssociado(String cdTpPfPjAssociado) {
this.cdTpPfPjAssociado = cdTpPfPjAssociado;
}
@Column(name="CD_TP_PF_PJ_ASSOC_PARTIC")
public String getCdTpPfPjAssociado() {
return cdTpPfPjAssociado;
}
public void setNomeAssociado(String nomeAssociado) {
this.nomeAssociado = nomeAssociado;
}
@Column(name="NM_ASSOC")
public String getNomeAssociado() {
return nomeAssociado;
}
public void setLogradouroAssociado(String logradouroAssociado) {
this.logradouroAssociado = logradouroAssociado;
}
@Column(name="NM_ASSOC_LOGRAD")
public String getLogradouroAssociado() {
return logradouroAssociado;
}
public void setComplementoAssociado(String complementoAssociado) {
this.complementoAssociado = complementoAssociado;
}
@Column(name="DS_ASSOC_COMPL")
public String getComplementoAssociado() {
return complementoAssociado;
}
public void setBairroAssociado(String bairroAssociado) {
this.bairroAssociado = bairroAssociado;
}
@Column(name="NM_ASSOC_BAIRRO")
public String getBairroAssociado() {
return bairroAssociado;
}
public void setCep(Long cep) {
this.cep = cep;
}
@Column(name="NR_ASSOC_CEP")
public Long getCep() {
return cep;
}
public void setNrTelefoneAssociado(Long nrTelefoneAssociado) {
this.nrTelefoneAssociado = nrTelefoneAssociado;
}
@Column(name="NR_ASSOC_TEL1")
public Long getNrTelefoneAssociado() {
return nrTelefoneAssociado;
}
public void setDddTelefoneAssociado(String dddTelefoneAssociado) {
this.dddTelefoneAssociado = dddTelefoneAssociado;
}
@Column(name="NR_ASSOC_DDD1")
public String getDddTelefoneAssociado() {
return dddTelefoneAssociado;
}
public void setDddFaxAssociado(String dddFaxAssociado) {
this.dddFaxAssociado = dddFaxAssociado;
}
@Column(name="NR_ASSOC_DDD_FAX")
public String getDddFaxAssociado() {
return dddFaxAssociado;
}
public void setNrFaxAssociado(Long nrFaxAssociado) {
this.nrFaxAssociado = nrFaxAssociado;
}
@Column(name="NR_ASSOC_FAX")
public Long getNrFaxAssociado() {
return nrFaxAssociado;
}
public void setEmailAssociado(String emailAssociado) {
this.emailAssociado = emailAssociado;
}
@Column(name="NR_ASSOC_EMAIL")
public String getEmailAssociado() {
return emailAssociado;
}
public void setMunicipio(Municipio municipio) {
this.municipio = municipio;
}
@ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name="CD_MUN", nullable = true)
public Municipio getMunicipio() {
if(municipio == null){
municipio = new Municipio();
}
return municipio;
}
public void setUf(Uf uf) {
this.uf = uf;
}
@ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL, optional=true)
@JoinColumn(name="SG_UF", nullable=true)
public Uf getUf() {
if(uf == null)
uf = new Uf();
return uf;
}
public void setParticipante(Participante participante) {
this.participante = participante;
}
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name="CD_TP_PF_PJ",referencedColumnName="CD_TP_PF_PJ",insertable=false,updatable=false),
@JoinColumn(name="NR_PF_PJ",referencedColumnName="NR_PF_PJ",insertable=false,updatable=false),
@JoinColumn(name="CD_TP_PARTIC",referencedColumnName="CD_TP_PARTIC",insertable=false,updatable=false),
@JoinColumn(name="DT_REG_PARTIC",referencedColumnName="DT_REG_PARTIC",insertable=false,updatable=false)
})
public Participante getParticipante() {
return participante;
}
}
metodo para persisitir
public void insere(){
montaAssocPartic();
participanteService.alterarParticipante(this.participante);
}
nesse montaAssocPartic() eu seto uf pra null