Dúvida Relacionamento JPA OneToOne [RESOLVIDO]

0 respostas
M
Boa tarde, eu tenho uma dúvida quando ao carregamento das classes em relacionamentos JPA, exemplo eu tenho duas Classes:
*/
@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<RequisicaoOrdemServico> getOrdemServicos()
//    {
//        return ordemServicos;
//    }
//
//    public void setOrdemServicos(List<RequisicaoOrdemServico> ordemServicos)
//    {
//        this.ordemServicos = ordemServicos;
//    }
    public List<RequisicaoInteracao> 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 + " ]";
    }
}
@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.
Criado 11 de dezembro de 2012
Respostas 0
Participantes 1