Ajuda com retorno de método usando VRaptor 3.5

6 respostas Resolvido
java
O

Boa noite pessoal.

Quebrando a cabeça aqui e não estou tendo exito.

Preciso de um método que me retorne um valor BigDecimal, preciso passar 2 parametros : codigo do funcionario ( atributo cod) , nomeFuncao e retornar o valor da comissao (atributo.

Tenho as classes Funcionario,Comissao:

@Entity
    @Table(name = "tb_funcionario")
    public class Funcionario implements Serializable {
    private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Basic(optional = false)
        @Column(name = "func_cod")
        private Long cod;
        @Column(length = 200)
        private String nome;
        @OneToMany(mappedBy = "funcionario", cascade = {CascadeType.ALL, CascadeType.REMOVE})
        private List<Comissao> comissao;
            
        //Construtor
        public Funcionario() {
        }
        //Getter e Setter
    omitidos...
    }

Classe Comissao:

@Entity
    @Table(name = "tb_comissao")
    public class Comissao implements Serializable {

        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Basic(optional = false)
        private Long cod;
        private String nomeFuncao;
        @Column(name = "perc_comissao", precision = 25, scale = 2)
        private Float percentualComissao;
        @ManyToOne
        private Funcionario funcionario;

        public Comissao() {
        }

        //Getters e Setters
    omitidos...
    }

Essas classes persistem no banco e isso está tranquilo, os dados são submetidos.

Ai o problema é que preciso pegar o valor do atributo: percentualComissao

Exemplo:

Funcionario: cod:1 nome: João (dados persistidos)
cod:2 nome: Vilma
Comissao: cod:1 nomeFuncao: Balconista percentualComissao: 10 funcionario:1
cod:2 nomeFuncao: Caixa percentualComissao: 15 funcionario:1
cod:3 nomeFuncao: Arquivador percentualComissao: 5 funcionario:1
cod:4 nomeFuncao: Atendente percentualComissao: 5 funcionario: 2
cod:5 nomeFuncao: Balconista percentualComissao: 10 funcionario:2

Nesse exemplo, o mesmo funcionario tem 3 funções e cada função sua comissão.

Ai eu queria montar um método que pegasse o atributo percentualComissao conforme eu passasse o nomeFuncao e cod do funcionario:

Passo cod:2 (funcionario) nomeFuncao: Balconista e o retorno do método seja percentualComissao: 10

Meu atributo pessoal no momento rsrrsrsrs é : situacao: Totalmente Perdido

Poderiam me ajudar nessa situação?
Grato

6 Respostas

A

Em qual parte exatamente é sua dificuldade? Buscar essas informaçoes no banco de dados?

Alguns comentários a parte:

  • Você nao deveria usar Float para armazenar o percentual da comissao. Você poderia usar um int (já que está pondo 10%, 5%, etc) ou usar diretamente um BigDecimal, se precisa manter valores quebrados.

  • Olhando de fora, me parece fazer mais sentido cada Funcao ter um percentual de comissao associada, do que a comissao ter um atributo funçao. Imagino que você vai dizer para alguém: “você vai trabalhar como balconista e vai ter 10% de comissao nisso” e nao “você vai ter 5% de comissao entao vai trabalhar como arquivador ou atendente”

E

Concordo, troque float por BigDecimal.

Tb tenho dificuldade em montar método.
Desanime não, logo alguém mais experiente te ajuda.

O

Boa noite.

Minha dificuldade é montar o método que busque essa informação no meu banco é retorne o valor do atributo.

Teriam algum exemplo?

O

Também tem dificuldade nisso? Pela sua resposta, tá com o mesmo problema. Se puder me dar uma ajuda agradeço.

O

Esse é o método que estou fazendo, mas não sei termina-lo pra pegar só o dado que preciso:

public BigDecimal getPercentualComissao(Long cod, String nomeFuncao) {
        Criteria criteria = session.createCriteria(Comissao.class);
        Criteria criteria2 = session.createCriteria(Comissao.class); (correto eu fazer isso?)
        criteria.add(Restrictions.eq("cod", cod));      
        criteria2.add(Restrictions.eq("nomeFuncao", nomeFuncao));         (correto eu fazer isso?)
       
           return (como faço o retorno do atributo que quero (percentualComissao)?
    }
A
Solucao aceita

Minhas skills em JPA/Hibernate sao quase inexistentes, mas acho que você pode fazer algo como:

public BigDecimal getPercentualComissao(Long cod, String nomeFuncao) {
    Criteria criteria = session.createCriteria(Comissao.class);
     criteria.add(Restrictions.eq("nomeFuncao", nomeFuncao)); 
     criteria.add(Restrictions.eq("funcionario.cod", cod));

    Comissao comissao = criteria.unique() //ou algo parecido

     return comissao.getPercentualComissao();

 }
Criado 9 de dezembro de 2016
Ultima resposta 13 de dez. de 2016
Respostas 6
Participantes 3