Dao Salvar do Vraptor?

26 respostas
juniorsatanas

Pessoal como eu seto um valor de um outro Dao ?

ex:
O usuário cadastra uma solicitação, e e setado um valor para o Status " solicitacao.setSoliStatusSolicitacaoNome("CAC - SAIDA NA SOLICITAÇÃO - 1");" quando o usuário selecionar os serviços para essa solicitação ele vai cadastrar n Serviços para esta solicitação e vai mudar o Status " solicitacao.setSoliStatusSolicitacaoNome("CAC - ENTRADA NA SOLICITAÇÃO - 2");",
O grande problema é so na mudança de Status, o resto o sistema já ta fazendo...

public class IntermediariaDao


 public void salva(IntermediariaSolicitacao intermediaria){
        Transaction tx = session.beginTransaction();
 //        solicitacao.setSoliStatusSolicitacaoNome("CAC - SAIDA NA SOLICITAÇÃO - 2");            ************************aqui que não sei como fazer isso
        session.save(intermediaria);
        tx.commit();
    }
public class SolicitacaoDao 

public void salva(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatus("Ativo");
        solicitacao.setSoliDataAtendimento(new Date());
        solicitacao.setSoliDataContato(new Date());
        solicitacao.setSoliDataSolicitacao(new Date());
        solicitacao.setSoliStatusSolicitacaoNome("CAC - SAIDA NA SOLICITAÇÃO - 1");
        session.save(solicitacao);
        tx.commit();
    }

[img]https://lh6.googleusercontent.com/_nTzBoYSeT2I/TayL5QsYBbI/AAAAAAAAEno/Yo7HKxKmeo0/s1024/solicitacao.png[/img]
[url]https://lh6.googleusercontent.com/_nTzBoYSeT2I/TayL5QsYBbI/AAAAAAAAEno/Yo7HKxKmeo0/s1024/solicitacao.png[/url]

TELA SOLICITAÇÃO

[img]https://lh3.googleusercontent.com/_nTzBoYSeT2I/TayM03t_hKI/AAAAAAAAEn0/myT6dIfufX4/s1024/tela1.png[/img]
[url]https://lh3.googleusercontent.com/_nTzBoYSeT2I/TayM03t_hKI/AAAAAAAAEn0/myT6dIfufX4/s1024/tela1.png[/url]

TELA LISTAGEM DE SOLICITAÇÃO
[img]https://lh5.googleusercontent.com/_nTzBoYSeT2I/TayM02pFVjI/AAAAAAAAEnw/y1vk5GNEBj4/s1024/tela2.png[/img]
[url]https://lh5.googleusercontent.com/_nTzBoYSeT2I/TayM02pFVjI/AAAAAAAAEnw/y1vk5GNEBj4/s1024/tela2.png[/url]

TELA ESCOLHA DE SERVIÇOS

[img]https://lh3.googleusercontent.com/_nTzBoYSeT2I/TayM0uPsVMI/AAAAAAAAEns/nhG-N5SgcKc/s1024/rela3.png[/img]
[/url]https://lh3.googleusercontent.com/_nTzBoYSeT2I/TayM0uPsVMI/AAAAAAAAEns/nhG-N5SgcKc/s1024/rela3.png[url]
Estou pensando em fazer usando gatilho no banco , se não conseguir !

Abraço e obrigado !

26 Respostas

Lucas_Cavalcanti

essa dúvida não tem nada a ver com o VRaptor…

poste no fórum de persistência

juniorsatanas

Lucas Boa Noite.

O problema é pertinente ao VRaptor, pois se foce JSF eu saberia como fazer, mas com o VRaptor não tenho idéia.. mas pode mover para lá.

Como fazer um metódo de um Dao execultar outro metodo de outro Dao… ± isso

Obrigado Jr.

Paulo_Silveira

oi Junior

Se fosse em JSF, como seria? Ai comparamos pra voce com VRaptor. mas realmente nao deveria impactar essa parte de persistencia.

E sugiro deixar o controle transacional fora do DAO.

abracos

juniorsatanas

Boa Noite Paulo.
Eu fiz algo parecido em JSF com tabelas intermediárias, posto assim que achar. Como deixar o controle transaccional fora do DAO ?

Tenho N métodos (pesquisar/desativar/ativar/editar/visualizar/etc)para cada entidade, logo se eu precisar fazer um update em uma tabela que pertence a X, só posso fazer de X, Y não poderia fazer isso ?

Funcionou fazendo um gatilho para setar o valor de acordo com a AÇÃO / update/ insert /

<!-- SE para Mostrar os estatus da solicitação-->
                                                <c:choose>
                                                    <c:when test="${(solicitacao.soliServicos != null)}">
                                                        &lt;td&gt;<img      />&lt;/td&gt;
                                                    &lt;/c:when&gt;
                                                    &lt;c:otherwise&gt;
                                                        &lt;c:if test="${(solicitacao.soliServicos == null)}"&gt;
                                                            &lt;td&gt;<img      />&lt;/td&gt;
                                                        &lt;/c:if&gt;
                                                    &lt;/c:otherwise&gt;
                                                &lt;/c:choose&gt;
                                                &lt;!-- fim do SE para Mostrar os estatus da solicitação--&gt;

Abraço e obrigado pela consultoria da Caelum Gratuita !

jr

juniorsatanas

Lucas Cavalcanti Bom dia !

O resultado usando Gatilhos no banco ficou assim :

https://lh4.googleusercontent.com/_nTzBoYSeT2I/Ta2RJKeCGbI/AAAAAAAAEoI/Mhi55Iy7uB4/s1024/gatilho.png

Abraço e Boa semana !

Lucas_Cavalcanti

recebe o outro dao no construtor do seu dao, e usa o outro dao para fazer o que vc quer

juniorsatanas

Tem algum exemplo ai ?

jr
Lucas_Cavalcanti

vc não sabe receber um dao como parâmetro no construtor?

juniorsatanas

Boa Tarde Lucas.

Não sei, vou vou ver na documentação se acho algo..

  Obrigado.
Lucas_Cavalcanti

velho, não tem nada de mais:

@Component
public class FuckerDAO {
   public FuckerDAO(SuckerDAO sucker, Session session) {
        this.sucker = sucker;
        this.session = session;
   }
   public void seuMetodoMaldito(PQP pqp) {
        sucker.fazOQueVCQuer(pqp);
       select do jeito que vc quer aqui
   }
}
juniorsatanas
USANDO GATILHO FICA MUITO TOSCO RESULTADO:
-- Function: sigi.solicitacao_to_status_solicitacao_5_4_status()

-- DROP FUNCTION sigi.solicitacao_to_status_solicitacao_5_4_status();

CREATE OR REPLACE FUNCTION sigi.solicitacao_to_status_solicitacao_5_4_status()
  RETURNS trigger AS
$BODY$
BEGIN
	IF TG_OP='INSERT' THEN
		INSERT INTO sigi.status_solicitacao (stat_nome, stat_fk_solicitacao_id, stat_cod) VALUES ('CAC', NEW.soli_pk_id, 1);
	ELSE
		IF TG_OP='UPDATE' THEN		
			IF (OLD.soli_pk_id &lt;&gt; NEW.soli_pk_id OR NEW.soli_fk_status_solicitacao_id &lt;&gt; OLD.soli_fk_status_solicitacao_id) THEN
				RAISE EXCEPTION 'Não é permitido alterar campos Id';
			END IF;
			IF OLD.soli_status_solicitacao_nome = 'FINALIZADO' OR OLD.soli_status_solicitacao_nome = 'CANCELADO' THEN
				RAISE EXCEPTION 'SOLICITAÇÃO FINALIZADA OU CANCELADA. Não é permitido alterar solicitações encerradas.';
			END IF;	
			--					
			IF OLD.soli_status_solicitacao_nome = NEW.soli_status_solicitacao_nome AND OLD.soli_status_solicitacao_cod = NEW.soli_status_solicitacao_cod THEN
			--
				IF (select extract(mons from age(now(), (select soli_data_solicitacao from sigi.solicitacao WHERE soli_pk_id = NEW.soli_pk_id)) ) &gt;= 1) THEN
					IF (SELECT stat_local FROM sigi.status_solicitacao WHERE stat_fk_solicitacao_id = NEW.soli_pk_id) IS NULL THEN
						UPDATE sigi.status_solicitacao SET stat_nome = 'CANCELADO', stat_motivo_cancelamento = 'Cancelado por exceder o prazo de 1(um) mês. Local: ' || stat_nome, stat_cod = 7, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
					ELSE
						UPDATE sigi.status_solicitacao SET stat_nome = 'CANCELADO', stat_motivo_cancelamento = 'Cancelado por exceder o prazo de 1(um) mês. Local: ' || stat_nome || ': ' || stat_local, stat_cod = 7, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
					END IF;
				ELSE
					IF NEW.soli_status_solicitacao_cod = 2 THEN
						UPDATE sigi.status_solicitacao SET stat_nome = 'DIVISÃO 1', stat_local = (SELECT divi_nome FROM sigi.divisoes WHERE NEW.soli_fk_divisoes1_id = divi_pk_id), stat_cod = 2 , stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;	
					END IF;
					IF NEW.soli_status_solicitacao_cod = '2.1' THEN
						IF NEW.soli_fk_divisoes2_id IS NULL THEN
							UPDATE sigi.status_solicitacao SET stat_nome = 'CAC2', stat_cod = 3, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
						ELSE
							UPDATE sigi.status_solicitacao SET stat_nome = 'DIVISÃO 2', stat_local = (SELECT divi_nome FROM sigi.divisoes WHERE NEW.soli_fk_divisoes2_id = divi_pk_id), stat_cod = '2.1' WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
						END IF;
					END IF;
					IF NEW.soli_status_solicitacao_cod = '2.2' THEN
						IF NEW.soli_fk_divisoes3_id IS NULL THEN
							UPDATE sigi.status_solicitacao SET stat_nome = 'CAC2', stat_cod = 3, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
						ELSE
							UPDATE sigi.status_solicitacao SET stat_nome = 'DIVISÃO 3', stat_local = (SELECT divi_nome FROM sigi.divisoes WHERE NEW.soli_fk_divisoes3_id = divi_pk_id), stat_cod = '2.2' WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
						END IF;
					END IF;
					IF NEW.soli_status_solicitacao_cod = '2.3' THEN
						IF NEW.soli_fk_divisoes4_id IS NULL THEN
							UPDATE sigi.status_solicitacao SET stat_nome = 'CAC2', stat_cod = 3, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
						ELSE
							UPDATE sigi.status_solicitacao SET stat_nome = 'DIVISÃO 4', stat_local = (SELECT divi_nome FROM sigi.divisoes WHERE NEW.soli_fk_divisoes4_id = divi_pk_id), stat_cod = '2.3' WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
						END IF;
					END IF;
					IF NEW.soli_status_solicitacao_cod = '2.4' THEN
						IF NEW.soli_fk_divisoes5_id IS NULL THEN
							UPDATE sigi.status_solicitacao SET stat_nome = 'CAC2', stat_cod = 3, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
						ELSE
							UPDATE sigi.status_solicitacao SET stat_nome = 'DIVISÃO 5', stat_local = (SELECT divi_nome FROM sigi.divisoes WHERE NEW.soli_fk_divisoes5_id = divi_pk_id), stat_cod = '2.4' WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
						END IF;
					END IF;
					IF NEW.soli_status_solicitacao_cod = 3 THEN
						UPDATE sigi.status_solicitacao SET stat_nome = 'CAC2', stat_cod = 3, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
					END IF;
					IF NEW.soli_status_solicitacao_cod = 4 THEN
						UPDATE sigi.status_solicitacao SET stat_nome = 'JUR', stat_cod = 4, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
					END IF;
					IF NEW.soli_status_solicitacao_cod = 5 THEN
						UPDATE sigi.status_solicitacao SET stat_nome = 'CAC3', stat_cod = 5, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
					END IF;
				END IF;
			END IF;
			IF OLD.soli_status_solicitacao_cod &lt;&gt;  NEW.soli_status_solicitacao_cod THEN
				IF NEW.soli_status_solicitacao_cod = 7 THEN
					IF (SELECT stat_local FROM sigi.status_solicitacao WHERE stat_fk_solicitacao_id = NEW.soli_pk_id) IS NULL THEN
						UPDATE sigi.status_solicitacao SET stat_nome = 'CANCELADO', stat_motivo_cancelamento = 'Cancelado pelo usuário. Local: ' || stat_nome, stat_cod = 7, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
					ELSE	
						UPDATE sigi.status_solicitacao SET stat_nome = 'CANCELADO', stat_motivo_cancelamento = 'Cancelado pelo usuário. Local: ' || stat_nome || ': ' || stat_local, stat_cod = 7, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
					END IF;
				END IF;
				IF NEW.soli_status_solicitacao_cod = 6 THEN
					UPDATE sigi.status_solicitacao SET stat_nome = 'FINALIZADO', stat_cod = 6, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
				END IF;
			END IF;
		END IF;
	END IF;
	RETURN NULL;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION sigi.solicitacao_to_status_solicitacao_5_4_status() OWNER TO root;
juniorsatanas

Eu Gostei do Metódo maudito… - Risos

Obrigado...

jr

juniorsatanas

Nos somos 10 Pessoas aqui, nem um conseguiu intender :

1. @Component 2. public class FuckerDAO { 3. public FuckerDAO(SuckerDAO sucker, Session session) { 4. this.sucker = sucker; 5. this.session = session; 6. } 7. public void seuMetodoMaldito(PQP pqp) { 8. sucker.fazOQueVCQuer(pqp); 9. select do jeito que vc quer aqui 10. } 11. }

Acho que não estou conseguindo passar para você o que eu quero fazer :

SolicitacaoDao
-----------------
public void salva(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("CAC - ENTRADA NA SOLICITAÇÃO - 1");
        session.save(solicitacao);
        tx.commit();
    }
SolicitacaoController
-----------------------
@Post
    @Path("/solicitacao/adiciona")
    public void adicionaClienteFisica(Solicitacao solicitacao) throws Exception {
        validator.addAll(Hibernate.validate(solicitacao));
        validator.onErrorUse(page()).of(SolicitacaoController.class).formularioClienteFisica();
        dao.salva(solicitacao);
        result.redirectTo(SolicitacaoController.class).lista();
    }

IntermediariaDao
-----------------
public void salva(IntermediariaSolicitacao intermediaria){
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("CAC - SAIDA DA SOLICITAÇÃO - 2");** aqui que tenho que usar o metodo Salva de SolicitaçãoDao
        session.save(intermediaria);
        tx.commit();
    }

IntermediariaController
-----------------------
@Post 
@Path("/intermediariaSolicitacao/adiciona")
        public void adiciona(List&lt;Intermediarias&gt; intermediariasList, Intermediarias intermediarias) throws Exception{
                    for(Intermediarias intermediaria : intermediariasList) {
                        validator.addAll(Hibernate.validate(intermediaria));
                        validator.onErrorUse(page()).of(IntermediariaController.class).formulario();
                        dao.salva(intermediariaSolicitacao);
                    }
                    result.redirectTo(IntermediariaController.class).lista();
        }

jr

Lucas_Cavalcanti

vc percebe que se vc chamar o salva do SolicitacaoDao ele vai sobrescrever o que vc colocou no setSoliStatusSolicitacaoNome?

faz simplesmente um session.save(solicitacao), não é o suficiente?

juniorsatanas

RESPONDE O QUE O PAULO PERGUNTOU :

Eu não seto o cascade no relacionamento entre as classes

assim:
@Cascade(CascadeType.SAVE_UPDATE)

Depois eu do um save no objeto que o hibernate resolve o resto.
Isso que eu queria dizer que, que no JSF é bem simples !

Lucas_Cavalcanti

o hibernate do JSF é o mesmo do vraptor… o cascade tb funciona

juniorsatanas

Lucas ai que é o problema, setSoliStatusSolicitacaoNome só funciona na SolicitacaoDao, se eu por setSoliStatusSolicitacaoNome na IntermediariaDao, ele não funciona…
Nem compila, nem da maneira que voce sugeriu !

Valeu.

juniorsatanas

vc percebe que se vc chamar o salva do SolicitacaoDao ele vai sobrescrever o que vc colocou no setSoliStatusSolicitacaoNome?

faz simplesmente um session.save(solicitacao), não é o suficiente?

Não funciona não ! nem compila.


https://lh4.googleusercontent.com/_nTzBoYSeT2I/Ta3kAiXEBgI/AAAAAAAAEoc/Jmk-LE1PSgg/s1024/erro.png

Lucas_Cavalcanti

não faz sentido não compilar…

a Solicitacao do SolicitacaoDao é diferente da do IntermediariaDao? o método é protected?

juniorsatanas
package br.com.catequese.dao;

import br.com.caelum.vraptor.ioc.Component;
import br.com.catequese.to.IntermediariaSolicitacao;
import br.com.catequese.to.Solicitacao;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

@Component
public class IntermediariaDao {
    private final Session session;
    
    public IntermediariaDao(Session session) {
        this.session = session;
    }

    public void salva(IntermediariaSolicitacao intermediaria){
        Transaction tx = session.beginTransaction();
        session.save(intermediaria);
       Solicitacao.setSoliStatusSolicitacaoNome("CAC - SAIR NA SOLICITAÇÃO - 2");    //**erro aqui
        session.save(intermediaria);                 
        session.save(solicitacao);                                                   //**erro aqui  
        tx.commit();
    }
 //***************************************Get para Conecção
     private Connection getConexao() {
        Connection con = null;
        return con;
    }
   //****************************************fim do get

     public List&lt;IntermediariaSolicitacao&gt; listaServico(Integer soliPkId) throws SQLException, ClassNotFoundException{
        return this.session.createCriteria(IntermediariaSolicitacao.class , "I")
                .createAlias("I.inteFkSolicitacaoId", "S")
                .createAlias("I.inteFkServicoId", "s")
                .add(Restrictions.eqProperty("S.soliPkId", "I.inteFkSolicitacaoId.soliPkId"))
                .add(Restrictions.eqProperty("s.servPkId", "I.inteFkServicoId.servPkId"))
                .add(Restrictions.eq("S.soliPkId", soliPkId))
                .list();
    }
   /* public List&lt;IntermediariaSolicitacao&gt; listaTudo(){
        return this.session.createCriteria(IntermediariaSolicitacao.class).addOrder(Order.asc("intePkId")).list();
    }*/
    public IntermediariaSolicitacao carrega(Integer intePkId) {
        return (IntermediariaSolicitacao) this.session.load(IntermediariaSolicitacao.class, intePkId);
    }
    public void atualiza(IntermediariaSolicitacao intermediaria) {
        Transaction tx = session.beginTransaction();
        this.session.update(intermediaria);
        tx.commit();
    }
    public List&lt;IntermediariaSolicitacao&gt; busca(Integer intePkId) {
        return session.createCriteria(IntermediariaSolicitacao.class)
        .add(Restrictions.ilike("intePkId", intePkId))
        .list();
    }
}
juniorsatanas
package br.com.catequese.dao;

import br.com.caelum.vraptor.ioc.Component;
import br.com.catequese.to.Solicitacao;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

@Component
public class SolicitacaoDao {

    private final Session session;
    private Object r;
    private Object JPAUtil;

    public SolicitacaoDao(Session session) {
        this.session = session;
    }

    public void salva(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatus("Ativo");
        solicitacao.setSoliDataAtendimento(new Date());
        solicitacao.setSoliDataContato(new Date());
        solicitacao.setSoliDataSolicitacao(new Date());
        solicitacao.setSoliStatusSolicitacaoNome("CAC - ENTRADA NA SOLICITAÇÃO - 1");
        session.save(solicitacao);
        tx.commit();
    }

    public void status(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("DIMEE - RETORNO PARA CAC  - 2");
        this.session.update(solicitacao);
        tx.commit();
    }

    public void atualizadimee(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("DIMEE - RETORNO PARA CAC  - 2");
        this.session.update(solicitacao);
        tx.commit();
    }

    public void atualizadimat(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("DIMAT - RETORNO PARA CAC  - 3");
        this.session.update(solicitacao);
        tx.commit();
    }

    public void atualizaditalq(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("DITALQ - RETORNO PARA CAC  - 4");
        this.session.update(solicitacao);
        tx.commit();
    }

    public void atualizanit(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("NIT - RETORNO PARA CAC  - 5");
        this.session.update(solicitacao);
        tx.commit();
    }

    public void atualizaasqua(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("ASQUA - RETORNO PARA CAC  - 6");
        this.session.update(solicitacao);
        tx.commit();
    }

    public void atualizacac(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("CAC - RETORNO DE DIVISÃO  - 7");
        this.session.update(solicitacao);
        tx.commit();
    }

    public void atualizajuridico(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("JURIDÍCO - RETORNO DO CAC  - 8");
        this.session.update(solicitacao);
        tx.commit();
    }

    public void atualizacancela(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("Cancelado - 9");
        this.session.update(solicitacao);
        tx.commit();
    }

    public void atualizaconcluido(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatusSolicitacaoNome("Concluido - 10");
        this.session.update(solicitacao);
        tx.commit();
    }

    public void desativar(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatus("Inativo");
        solicitacao.setSoliDataDesativacao(new Date());
        session.update(solicitacao);
        tx.commit();
    }

    public void ativar(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatus("Ativo");
        solicitacao.setSoliDataDesativacao(null);
        session.update(solicitacao);
        tx.commit();
    }

    public List&lt;Solicitacao&gt; listaTudo() {
        return this.session.createCriteria(Solicitacao.class).addOrder(Order.asc("soliNegociacao")).setMaxResults(20).list();
    }
    //=====================================Lista Geral Serviços

    public List&lt;Solicitacao&gt; listaServico() throws SQLException, ClassNotFoundException {
        return this.session.createCriteria(Solicitacao.class, "S").createAlias("S.soliFkIntermediariaSolicitacaoId", "i").createAlias("i.inteFkServicoId", "s").add(Restrictions.eqProperty("i.intePkId", "S.soliFkIntermediariaSolicitacaoId.intePkId")).add(Restrictions.eqProperty("s.servPkId", "i.inteFkServicoId.servPkId")).add(Restrictions.eq("s.serPkId", 1L)).list();
    }
    //======================================SELECT para Processos

    public Solicitacao carregaProcesso(Integer soliPkId) throws SQLException, ClassNotFoundException {
        Connection con = getConexao();
        Statement stmt = con.createStatement();
        stmt.executeUpdate("UPDATE sigi.solicitacao SET soli_soma_servicos = "
                + "(SELECT sum(servicos.serv_preco) FROM sigi.intermediariasolicitacao, sigi.servicos "
                + "WHERE intermediariasolicitacao.inte_fk_solicitacao_id = " + soliPkId
                + " AND intermediariasolicitacao.inte_fk_servico_id = servicos.serv_pk_id) WHERE solicitacao.soli_pk_id = " + soliPkId);
        return (Solicitacao) this.session.load(Solicitacao.class, soliPkId);

    }
    //***************************************Get para Conecção

    private Connection getConexao() {
        Connection con = null;
        return con;
    }
    //****************************************fim do get

    public List&lt;Solicitacao&gt; listaSolicitacoesDitalq() {
        return this.session.createCriteria(Solicitacao.class).addOrder(Order.asc("soliDescricao"))
                .add(Restrictions.eq("soliStatus", "Ativo"))
                .add(Restrictions.eq("soliFkDivisoes4Id.diviPkId", 4)).setMaxResults(20).list();
    }

    public List&lt;Solicitacao&gt; listaSolicitacoesDimat() {
        return this.session.createCriteria(Solicitacao.class).addOrder(Order.asc("soliDescricao"))
                .add(Restrictions.eq("soliStatus", "Ativo"))
                .add(Restrictions.eq("soliFkDivisoes2Id.diviPkId", 2)).setMaxResults(20).list();
    }

    public List&lt;Solicitacao&gt; listaSolicitacoesDimee() {
        return this.session.createCriteria(Solicitacao.class).addOrder(Order.asc("soliDescricao"))
                .add(Restrictions.eq("soliStatus", "Ativo"))
                .add(Restrictions.eq("soliFkDivisoes3Id.diviPkId", 3)).setMaxResults(20).list();
    }

    public List&lt;Solicitacao&gt; listaSolicitacoesNit() {
        return this.session.createCriteria(Solicitacao.class).addOrder(Order.asc("soliDescricao"))
                .add(Restrictions.eq("soliStatus", "Ativo"))
                .add(Restrictions.eq("soliFkDivisoes5Id.diviPkId", 5)).setMaxResults(20).list();
    }

    public List&lt;Solicitacao&gt; listaTudoativo() {
        return this.session.createCriteria(Solicitacao.class).addOrder(Order.asc("soliNegociacao")).setMaxResults(20)
                .add(Restrictions.eq("soliStatus", "Ativo")).list();
    }

    public List&lt;Solicitacao&gt; listaTudoinativo() {
        return this.session.createCriteria(Solicitacao.class).addOrder(Order.asc("soliNegociacao"))
                .add(Restrictions.eq("soliStatus", "Inativo")).setMaxResults(20).list();
    }

    public List&lt;Solicitacao&gt; listaTudoativocac() {
        return this.session.createCriteria(Solicitacao.class).addOrder(Order.asc("soliNegociacao")).setMaxResults(20)
                .add(Restrictions.eq("soliStatus", "Ativo")).list();
    }

    public Solicitacao carrega(Integer soliPkId) {
        return (Solicitacao) this.session.load(Solicitacao.class, soliPkId);
    }

    public void atualiza(Solicitacao solicitacao) {
        Transaction tx = session.beginTransaction();
        solicitacao.setSoliStatus("Ativo");
        this.session.update(solicitacao);
        tx.commit();
    }

    public List&lt;Solicitacao&gt; busca(Integer soliPkId) {
        return session.createCriteria(Solicitacao.class)
                .add(Restrictions.eq("soliPkId", soliPkId))
                .add(Restrictions.eq("soliStatus", "Ativo"))
                .list();
    }

    public List&lt;Solicitacao&gt; buscaSolicitacoesNit(Integer soliPkId) {
        return session.createCriteria(Solicitacao.class)
                .add(Restrictions.eq("soliPkId", soliPkId))
                .add(Restrictions.eq("soliStatus", "Ativo"))
                .add(Restrictions.eq("soliFkDivisoes5Id.diviPkId", 5))
                .list();
    }

    public List&lt;Solicitacao&gt; buscaSolicitacoesDimat(Integer soliPkId) {
        return session.createCriteria(Solicitacao.class)
                .add(Restrictions.eq("soliPkId", soliPkId))
                .add(Restrictions.eq("soliStatus", "Ativo"))
                .add(Restrictions.eq("soliFkDivisoes2Id.diviPkId", 2))
                .list();
    }

    public List&lt;Solicitacao&gt; buscaSolicitacoesDimee(Integer soliPkId) {
        return session.createCriteria(Solicitacao.class)
                .add(Restrictions.eq("soliPkId", soliPkId))
                .add(Restrictions.eq("soliStatus", "Ativo"))
                .add(Restrictions.eq("soliFkDivisoes3Id.diviPkId", 3))
                .list();
    }

    public List&lt;Solicitacao&gt; buscaSolicitacoesDitalq(Integer soliPkId) {
        return session.createCriteria(Solicitacao.class)
                .add(Restrictions.eq("soliPkId", soliPkId))
                .add(Restrictions.eq("soliStatus", "Ativo"))
                .add(Restrictions.eq("soliFkDivisoes4Id.diviPkId", 4))
                .list();
    }
}
Lucas_Cavalcanti

-qual é a solicitação que vc quer salvar no solicitacaoDao?
-como vc vai pegar essa solicitação a partir da intermediaria?

juniorsatanas

Funciona assim:

Cadastro uma Solicitação pela central de atendimento CAC, para um determinado cliente, pedido para que o LABORATORIO X determine preços e quais exame laboratorial vão ser feitos para a solicitação (isso ja ta ok)
Após ter uma solicitação cadastrada no Sistema os laboratórios recebem uma grid com uma lista das solicitações abertas para eles escolherem X serviços para cada solicitação. (isso ja ta ok)

Solicitação----------------intermediaria-----------------Serviços

         1------------------     1------------------                                1------------------1
         *------------------      ------------------                                 2 ------------------                                       2
         *------------------      ------------------                                 3------------------                                       3

1 Solicitação para Varios Servicos tudo fica cadastrado na intermediaria… isso ta ok ja
Problema e mudar o STATUS.

Quando eu cadastro uma solicitação eu seto um STATUS Entrada CAC 1. ok ele seta na boa, faço isso no método salvar , esse campo status fica na entidade Solicitacao.

Quando eu Cadastro na intermediaria, que é igual pk da Solicitacao e a pk dos servicos ele vai ok também, cadastra tudo perfeitamente, So que agora eu gostaria de mudar o Status da entidade Solicitacao, o campo STATUS para Saida CAC 2. so que esse campo fica na entidade Solicitacao e não entidade Intermediaria.

juniorsatanas

O metodo nao e protegido e não e diferente
Eu consigo salvar qualquer solicitação usando o solicitaçãoDao
Eu não preciso pegar a Solicitação a partir da intermediaria, pois eu quero setar só o valor do status, toda vez que for dado um salvar na intermediaria ele vai mudar o status da solicitacao.

Lucas_Cavalcanti

velho, não vou tentar entender a arquitetura do seu sistema pra responder sua dúvida…

pra mim a sua dúvida nem faz sentido… mas enfim, isso seria a resposta:

public IntermediariaDao {
    public IntermediariaDao(SolicitacaoDao solicitacaoDao, ...) {
         this.solicitacaoDao = solicitacaoDao
         //...
   } 

   //...

   public void save(IntermediariaSolicitacao solicitacao) {
        solicitacaoDao.save(solicitacao);

        // o código que estava aqui
   }
}
juniorsatanas

Lucas Boa Tarde !

Antes de mais nada obrigado por me ajudar a chegar a solução desse probleminha !

Não cheguei a fazer da maneira que você sugeriu pois deus certo assim :

//Este método além de cadastrar os serviços nas tabela intermediária tem que mudar os estatus da SOLICITAÇÃO. para 2
        @Post @Path("/intermediariaServicosDimat/adiciona")
        public void adicionaServicosDimat(List&lt;IntermediariaSolicitacao&gt; intermediariaList) throws Exception{
            IntermediariaSolicitacao inter = intermediariaList.get(1);
            Solicitacao soli = solidao.carrega(inter.getInteFkSolicitacaoId().getSoliPkId());
            solidao.atualizadimat(soli);
           for(IntermediariaSolicitacao intermediaria : intermediariaList) {
                validator.addAll(Hibernate.validate(intermediaria));
                dao.salva(intermediaria);
            }

                result.redirectTo(SolicitacaoController.class).listaSolicitacoesDimat();
        }

Ta perfeito Obrigado

jr

Criado 18 de abril de 2011
Ultima resposta 29 de abr. de 2011
Respostas 26
Participantes 3