Dao Salvar do Vraptor?

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…

[code]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();
}

[/code]



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();
    }


https://lh6.googleusercontent.com/_nTzBoYSeT2I/TayL5QsYBbI/AAAAAAAAEno/Yo7HKxKmeo0/s1024/solicitacao.png

TELA SOLICITAÇÃO


https://lh3.googleusercontent.com/_nTzBoYSeT2I/TayM03t_hKI/AAAAAAAAEn0/myT6dIfufX4/s1024/tela1.png

TELA LISTAGEM DE SOLICITAÇÃO

https://lh5.googleusercontent.com/_nTzBoYSeT2I/TayM02pFVjI/AAAAAAAAEnw/y1vk5GNEBj4/s1024/tela2.png

TELA ESCOLHA DE SERVIÇOS


[/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 !

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

poste no fórum de persistência

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.

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

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 /

     [code] <!-- 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;[/code]

Abraço e obrigado pela consultoria da Caelum Gratuita !

jr

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 !

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

Tem algum exemplo ai ?

     jr

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

Boa Tarde Lucas.

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

  Obrigado.

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
   }
}

USANDO GATILHO FICA MUITO TOSCO RESULTADO:

[code]-- 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 <> NEW.soli_pk_id OR NEW.soli_fk_status_solicitacao_id <> 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)) ) >= 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 <> 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;
[/code]

Eu Gostei do Metódo maudito… - Risos

     Obrigado...

jr

Nos somos 10 Pessoas aqui, nem um conseguiu intender :

[quote] 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. } [/quote]

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

  [code]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<Intermediarias> 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();
}

[/code]

jr

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?

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 !

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

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.

[quote]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? [/quote]

Não funciona não ! nem compila.


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

não faz sentido não compilar…

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