Dao Salvar do Vraptor?

[code]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<IntermediariaSolicitacao> 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<IntermediariaSolicitacao> 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<IntermediariaSolicitacao> busca(Integer intePkId) {
return session.createCriteria(IntermediariaSolicitacao.class)
.add(Restrictions.ilike(“intePkId”, intePkId))
.list();
}
}[/code]

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

}

[/code]

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

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.

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.

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

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 :

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

Ta perfeito Obrigado

jr