Boa tarde, eu tenho uma dúvida quando ao carregamento das classes em relacionamentos JPA, exemplo eu tenho duas Classes:[code] */
@Entity
@Table(name = “requisicoes”)
public class Requisicao implements java.io.Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(nullable = false, name = "data_criacao")
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date dataCriacao = new Date();
@Valid
@NotNull(message = "Preencha o campo Destinatário.")
@JoinColumn(nullable = false, name = "destinatario_id")
@ManyToOne(optional = false)
private Funcionario destinatario;
@Valid
@JoinColumn(nullable = false, name = "requisitante_id")
@ManyToOne(optional = false)
private Funcionario requisitante;
@JoinColumn(nullable = false, name = "requisicao_status_id")
@ManyToOne(optional = false)
private RequisicaoStatus status;
@NotEmpty(message = "Preencha o campo Descrição.")
@Column(nullable = false, length = 5000)
private String descricao;
@Enumerated(EnumType.STRING)
@Column(nullable = false, length = 50)
private RequisicaoClassificacaoType classificacao = RequisicaoClassificacaoType.NAO_CLASSIFICADA;
@Column(name = "data_classificacao")
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataClassificacao;
@Valid
@JoinColumn(name = "responsavel_classificacao_id")
@ManyToOne(optional = false)
private Funcionario responsavelClassificacao;
@Column(length = 5000)
private String resposta;
@Column(name = "data_conclusao")
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date dataConclusao;
@JoinColumn(name = "responsavel_conclusao_id")
@ManyToOne(optional = false)
private Funcionario responsavelConclusao;
@Column(length = 200, name = "requisicao_arquivo")
private String requisicaoArquivo;
@OneToOne(mappedBy = "requisicao")
private RequisicaoAnalise analise;
@OneToOne(mappedBy = "requisicao", optional = false, fetch = FetchType.EAGER)
private RequisicaoOrdemServico ordemDeServico;
@OneToMany(mappedBy = "requisicao", orphanRemoval = true)
private List<RequisicaoInteracao> interacoes = new LinkedList<RequisicaoInteracao>();
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public Date getDataCriacao()
{
return dataCriacao;
}
public void setDataCriacao(Date dataCriacao)
{
this.dataCriacao = dataCriacao;
}
public Funcionario getDestinatario()
{
return destinatario;
}
public void setDestinatario(Funcionario destinatario)
{
this.destinatario = destinatario;
}
public Funcionario getRequisitante()
{
return requisitante;
}
public void setRequisitante(Funcionario requisitante)
{
this.requisitante = requisitante;
}
public RequisicaoStatus getStatus()
{
return status;
}
public void setStatus(RequisicaoStatus status)
{
this.status = status;
}
public String getDescricao()
{
return descricao;
}
public void setDescricao(String descricao)
{
this.descricao = descricao;
}
public RequisicaoClassificacaoType getClassificacao()
{
return classificacao;
}
public void setClassificacao(RequisicaoClassificacaoType classificacao)
{
this.classificacao = classificacao;
}
public Date getDataClassificacao()
{
return dataClassificacao;
}
public void setDataClassificacao(Date dataClassificacao)
{
this.dataClassificacao = dataClassificacao;
}
public Funcionario getResponsavelClassificacao()
{
return responsavelClassificacao;
}
public void setResponsavelClassificacao(Funcionario responsavelClassificacao)
{
this.responsavelClassificacao = responsavelClassificacao;
}
public String getResposta()
{
return resposta;
}
public void setResposta(String resposta)
{
this.resposta = resposta;
}
public Date getDataConclusao()
{
return dataConclusao;
}
public void setDataConclusao(Date dataConclusao)
{
this.dataConclusao = dataConclusao;
}
public Funcionario getResponsavelConclusao()
{
return responsavelConclusao;
}
public void setResponsavelConclusao(Funcionario responsavelConclusao)
{
this.responsavelConclusao = responsavelConclusao;
}
public String getRequisicaoArquivo()
{
return requisicaoArquivo;
}
public void setRequisicaoArquivo(String requisicaoArquivo)
{
this.requisicaoArquivo = requisicaoArquivo;
}
public RequisicaoAnalise getAnalise()
{
return analise;
}
public void setAnalise(RequisicaoAnalise analise)
{
this.analise = analise;
}
public RequisicaoOrdemServico getOrdemDeServico()
{
return ordemDeServico;
}
public void setOrdemDeServico(RequisicaoOrdemServico ordemDeServico)
{
this.ordemDeServico = ordemDeServico;
}
//
// public List getOrdemServicos()
// {
// return ordemServicos;
// }
//
// public void setOrdemServicos(List ordemServicos)
// {
// this.ordemServicos = ordemServicos;
// }
public List getInteracoes()
{
return interacoes;
}
public void setInteracoes(List<RequisicaoInteracao> interacoes)
{
this.interacoes = interacoes;
}
public boolean classificacaoDuvida()
{
return getClassificacao().equals(RequisicaoClassificacaoType.DUVIDA);
}
// public RequisicaoOrdemServico getOrdemDeServico()
// {
// if(ordemServicos != null)
// {
// RequisicaoOrdemServico os = new RequisicaoOrdemServico();
//
// for(RequisicaoOrdemServico requisicaoOrdemServico : ordemServicos)
// {
//// System.out.println(requisicaoOrdemServico.getId());
// os = requisicaoOrdemServico;
// }
// return os;
// }
// return null;
// }
@Override
public int hashCode()
{
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object)
{
// TODO: Warning - this method won't work in the case the id fields are not set
if(!(object instanceof Requisicao))
{
return false;
}
Requisicao other = (Requisicao)object;
if((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id)))
{
return false;
}
return true;
}
@Override
public String toString()
{
return "br.com.financeiroa2.model.entities.Requisicao[ id=" + id + " ]";
}
}
[/code]
@Entity
@Table(name = "requisicoes_ordens_servicos")
public class RequisicaoOrdemServico implements java.io.Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(nullable = false, name = "data_criacao")
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataCriacao = new Date();
@JoinColumn(nullable = false, name = "requisicao_id", unique = true)
@OneToOne(optional = false)
private Requisicao requisicao;
@JoinColumn(name = "responsavel_id")
@ManyToOne(optional = false)
private Funcionario responsavel;
@Column(name = "data_inicio")
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataInicio;
@Column(length = 5000)
private String alteracoes;
@Column(name = "tempo_desenvolvimento")
private short tempoDesenvolvimento;
@Column(name = "data_conclusao")
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataConclusao;
public RequisicaoOrdemServico()
{
}
public RequisicaoOrdemServico(Requisicao requisicao, Funcionario responsavel)
{
this.requisicao = requisicao;
this.responsavel = responsavel;
}
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public Date getDataCriacao()
{
return dataCriacao;
}
public void setDataCriacao(Date dataCriacao)
{
this.dataCriacao = dataCriacao;
}
public Requisicao getRequisicao()
{
return requisicao;
}
public void setRequisicao(Requisicao requisicao)
{
this.requisicao = requisicao;
}
public Funcionario getResponsavel()
{
return responsavel;
}
public void setResponsavel(Funcionario responsavel)
{
this.responsavel = responsavel;
}
public Date getDataInicio()
{
return dataInicio;
}
public void setDataInicio(Date dataInicio)
{
this.dataInicio = dataInicio;
}
public String getAlteracoes()
{
return alteracoes;
}
public void setAlteracoes(String alteracoes)
{
this.alteracoes = alteracoes;
}
public short getTempoDesenvolvimento()
{
return tempoDesenvolvimento;
}
public void setTempoDesenvolvimento(short tempoDesenvolvimento)
{
this.tempoDesenvolvimento = tempoDesenvolvimento;
}
public Date getDataConclusao()
{
return dataConclusao;
}
public void setDataConclusao(Date dataConclusao)
{
this.dataConclusao = dataConclusao;
}
@Override
public int hashCode()
{
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object)
{
// TODO: Warning - this method won't work in the case the id fields are not set
if(!(object instanceof RequisicaoOrdemServico))
{
return false;
}
RequisicaoOrdemServico other = (RequisicaoOrdemServico)object;
if((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id)))
{
return false;
}
return true;
}
@Override
public String toString()
{
return "br.com.financeiroa2.model.entities.RequisicaoOrdemServico[ id=" + id + " ]";
}
}
A minha dúvida é depois que eu salvar uma RequisicaoOrdermServico e recuperar uma Requisicao a minha ordem de serviço não deveria vir junto automaticamente por causa da anotação @OneToOne(mappedBy = "requisicao", optional = false, fetch = FetchType.EAGER)?
Eu consegui resolver da seguinte maneira: antes de salvar minha ordemdeServiço executei requisicao.setOrdemDeServico(requisicaoOrdemServico); e funcionou tranquilamente sem eu precisar percorrer a lista fazendo a busda para as ordens de serviços.