Boa tarde galera, estou apanhando para fazer um criteria que me retorne os materiais da produtora, porem esses materiais tem estar com os status aprovados para aparecer… estou fazendo da seguinte maneira
Não é assim que se faz. Está muito fora do que deve ser feito.
Para te ajudar, eu preciso saber um pouco mais sobre a classe Produtora e sua relação com a classe Material.
Se puder, posta essas classes.
N
nepsterbr
ok amigo obrigado segue em baixo as classes
Material
@Entity@Table(name="material")@SequenceGenerator(name="material_seq",sequenceName="material_seq")publicclassMaterialimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@Id@GeneratedValue(strategy=GenerationType.AUTO,generator="material_seq")@Column(name="id")privateLongid;@Column(name="titulo")privateStringtitulo;@Column(name="duaracao")privateStringduracao;@Column(name="dataMaterial")@Temporal(javax.persistence.TemporalType.TIMESTAMP)privateDatedataMaterial;@Column(name="numeroMidia")privateStringnumeroMidia;@Column(name="statusENG")privateStringstatusEng;@Column(name="statusOPEC")privateStringstatusOPEC;@Column(name="operador")privateStringoperador;@ManyToOne@JoinColumn(name="id_produtora")privateProdutoraprodutora;@ManyToOne@JoinColumn(name="id_cliente")privateClientecliente;@ManyToOne@JoinColumn(name="id_midia")privateMidiamidia;//GETTERS AND SETTERS}
Produtora
@Entity@Table(name="produtora")@SequenceGenerator(name="produtora_seq",sequenceName="produtora_seq")publicclassProdutoraimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@Id@GeneratedValue(strategy=GenerationType.AUTO,generator="produtora_seq")@Column(name="id")privateLongid;@Column(name="produtora")privateStringprodutora;@Column(name="observacao")privateStringobservacao;@Column(name="telefone")privateStringtelefone;@Column(name="celular")privateStringcelular;//Getters and Setters }
romarcio
Só uma dúvida, nesse teste: if(produtora.getStatusEng == "Aprovado) Você está testando se produtora.getStatusEng é igual a aprovado.
Mas getStatusEng não tem na classe Produtora e sim na classe Material. Ta certo o que você postou referente a isso?
N
nepsterbr
isso mesmo observei depois que fiz a pergunta uhahuahuha… eu não tenho relacionamento entre Produtora e Material :S! me desculpe
romarcio
E então, ainda vai precisar de ajuda na consulta? Ou resolve sozinho?
Se for precisar de ajuda, explica o que vai precisar ok.
N
nepsterbr
na verdade preciso sim! eu consegui fazer a Criteria para me trazer os materiais da produtora, pore agora eu preciso trazer os materiais da produtora que estegam com os Status da Engenharia (statusEng) como aprovado… esse status da eng é do tipo String pois tenho 4 tipos de status já devido vc poderia me ajudar?
N
nepsterbr
Romarcio eu fiz com operador ternario! porem eu fico na duvida se isso é correto ou não
mais essa criteria apenas me retorna os status, idependente de qual seja, eu preciso que me liste os materiais da produtora e se eles são aprovados ou não
romarcio
Essa consulta vai te retornar uma lista com todos os materiais que possuem o “statusEng” igual a aprovado ou qualquer outro que enviar.
A lista vai ser formada por esses objetos do tipo Material e dentro desse objeto você vai ter acesso ao dados da Produtora, através do atributo “produtora”.
romarcio
Quando eu fiz a restrição: Restrictions.eq("statusEng", status)
Estou dizendo que quero que retorne apenas quando statusEng == status.
Dai se status, recebido como parametro, vale ‘aprovado’, a consulta vai retornar apenas os aprovados.
N
nepsterbr
aa legal, consegui visualizar a ideia vou fazer agora aqui, obrigado… porem aquele operador ternario que fiz logo acima é correto fazer? ou não??
romarcio
Para a consulta não faz diferença. Passe apenas o status que quer pesquisar como parâmetro para o método.
SELECT *
FROM PRODUTORA P, MATERIAL M
WHERE P.ID = M.ID_PRODUTORA
AND M.STATUSENG = 'Aprovado';
A consulta que te passei faz exatamente isso. Embora não apareça o teste entre os id’s o hibernate faz isso por conta própria.
romarcio
Veja no SQL que o hibernate monta e mostra no console quando você executa a consulta. Se esse SQL não está sendo exibido para você, adicione na configuração do hibernate a propriedade ‘hibernate.show_sql’ e sete seu valor como ‘true’.
N
nepsterbr
ta eu fiz isso, mais e agora para mim filtrar por produtora dentro desta mesmo criteria?
romarcio
Mas você precisa filtrar por qual atributo da produtora? Por que status não é da produtora é de material.
Coloca ai pra mim o select que você precisa transformar em criteria.
O que estou tentando fazer é o seguinte tenho uma combo que me lista todas as produtoras, quando eu seleciono esta produtora eu tenho que disparar a criteria que me retorne os materiais dessa produtora e os que estejam com o status aprovado.
romarcio
Mas com esse select você não esta filtrando por produtora, está filtrando por STATUSENG. E esse select é exatamente o que eu fiz em criteria para você.
N
nepsterbr
deslize meu, desculpe-me :S! eu to ficando louco ja uhahuahuhua! você poderia me ajudar a desenvolver essa Criteria? --’
romarcio
Qual será o parametro que vai passar para pesquisar a Produtora, id ou produtora?
N
nepsterbr
id da produtora
romarcio
Testa assim:
public List<Material> consultaMateriais(String status, int id) {
return getSession().createCriteria(Material.class)
.add(Restrictions.eq("statusEng", status))
.createAlias("produtora", "p")
.add(Restrictions.eq("p.id", id))
.list();
}
N
nepsterbr
Voce é o cara!! ahuauhuhauha muito obrigado romarcio!