estou com um problema com uma query e não consigo resolver. Será que alguem conseguiria me ajudar?
A query é a seguinte:
StringBuffersql=newStringBuffer();sql.append(" update Projeto set status = :status ");sql.append(" where acaoAtividadeDaRelacaoDeIntencao.numeroDoGrupoModular = :grupoModular ");sql.append(" and acaoAtividadeDaRelacaoDeIntencao.acaoAtividade.numeroDoModulo > :numeroModulo ");Queryquery=getSession().createQuery(sql.toString());query.setParameter("grupoModular",projeto.getAcaoAtividadeDaRelacaoDeIntencao().getNumeroDoGrupoModular());query.setParameter("numeroModulo",projeto.getAcaoAtividadeDaRelacaoDeIntencao().getAcaoAtividade().getNumeroDoModulo());query.setParameter("status",TipoDeStatusDoProjeto.CANCELAMENTO_ACEITO);query.executeUpdate();
Creio que os erros estao nestas duas linhas pois pelo que eu sei
e necessario refenrenciar somente o campo da tabelas eh nao o nome de toda a sua entidade .
sql.append(" where acaoAtividadeDaRelacaoDeIntencao.numeroDoGrupoModular = :grupoModular ");
sql.append(" and acaoAtividadeDaRelacaoDeIntencao.acaoAtividade.numeroDoModulo > :numeroModulo ");
teste assim .
sql.append(" where numeroDoGrupoModular = :grupoModular ");
sql.append(" and numeroDoModulo > :numeroModulo ");
rubensdemelo
Qual o resultado final da string?
Posta também.
rodrigo.fai
edmarr:
Creio que os erros estao nestas duas linhas pois pelo que eu sei
e necessario refenrenciar somente o campo da tabelas eh nao o nome de toda a sua entidade .
sql.append(" where acaoAtividadeDaRelacaoDeIntencao.numeroDoGrupoModular = :grupoModular ");
sql.append(" and acaoAtividadeDaRelacaoDeIntencao.acaoAtividade.numeroDoModulo > :numeroModulo ");
teste assim .
sql.append(" where numeroDoGrupoModular = :grupoModular ");
sql.append(" and numeroDoModulo > :numeroModulo ");
Eu tirei o nome das entidades e a vírgula sumiu realmente! Porém, é exibida outra mensagem informando que as colunas “numeroDoGrupoModular” e “numeroDoModulo” não existem!
Estas colunas não pertencem a tabela “Projeto”, são de outras tabelas relacionadas com Projeto.
edmarr
Então vc tem q fazer uma relação um join entre as tabelas , vc esta apanhando no sql verifique o relacionamento entre as tabelas antes de montar o Sql ,
Lembrando vc n precisa criar varios tópicos para um mesmo assunto .
rodrigo.fai
edmarr:
Então vc tem q fazer uma relação um join entre as tabelas , vc esta apanhando no sql verifique o relacionamento entre as tabelas antes de montar o Sql ,
Lembrando vc n precisa criar varios tópicos para um mesmo assunto .
Tente usar o join mais não deu muito certo meu amigo!
Dê uma olhada no código:
sql.append(" update Projeto as proj set proj.status = :status ");sql.append(" join proj.acaoAtividadeDaRelacaoDeIntencao as aari");sql.append(" where aari.numeroDoGrupoModular = :grupoModular ");
É exibida a seguinte mensagem de erro:
edmarr
Voce ta confundido tudo tente execultar o sql que vc deseja fazer update primeiro em uma IDE de sql ,
caso n consiga poste o relacionamento entre as tabelas . exemplo.
sql.append(" update tabela1 set status = :status ");sql.append(" where codigo = (select codigo from tabela2 t2 from t2.codigo = :codigo )");sql.append(" and grupomodular = :grupoModular ");
Lembrando vc esta errando eh a como fazer o relacionamento entre as tabelas .
rodrigo.fai
edmarr:
Voce ta confundido tudo tente execultar o sql que vc deseja fazer update primeiro em uma IDE de sql ,
caso n consiga poste o relacionamento entre as tabelas . exemplo.
sql.append(" update tabela1 set status = :status ");sql.append(" where codigo = (select codigo from tabela2 t2 from t2.codigo = :codigo )");sql.append(" and grupomodular = :grupoModular ");
Lembrando vc esta errando eh a como fazer o relacionamento entre as tabelas .
Relacionamento:
A tabela Projeto tem um relacionamento “OneToOne” com a AcaoAtividadeDaRelacaoDeIntencao, que por sua vez têm um relacionamento “ManyToOne” com a tabela AcaoAtividade.
edmarr
Tente assim .
sql.append(" update projeto set status = :status ");sql.append(" where codigo = (select codigo from AcaoAtividadeDaRelacaoDeIntencao where t2.codigo = :codigo )");sql.append(" and grupomodular = (select grupomodular from AcaoAtividade t3 where t3.grupomodular = :grupomodular )");
lembrando nao sei como esta a estrutura do seu banco .
rodrigo.fai
edmarr:
Tente assim .
sql.append(" update projeto set status = :status ");sql.append(" where codigo = (select codigo from AcaoAtividadeDaRelacaoDeIntencao where t2.codigo = :codigo )");sql.append(" and grupomodular = (select grupomodular from AcaoAtividade t3 where t3.grupomodular = :grupomodular )");
lembrando nao sei como esta a estrutura do seu banco .
A estrutura entre as tabelas? Não tenho elas em mãos! Com o relacionamento já não daria p/ me ajudar?
rodrigo.fai
edmarr:
Tente assim .
sql.append(" update projeto set status = :status ");sql.append(" where codigo = (select codigo from AcaoAtividadeDaRelacaoDeIntencao where t2.codigo = :codigo )");sql.append(" and grupomodular = (select grupomodular from AcaoAtividade t3 where t3.grupomodular = :grupomodular )");
lembrando nao sei como esta a estrutura do seu banco .
Por que “where codigo”? Eu preciso verificar o numeroDoGrupoModular da tabela AcaoAtividadeDaRelacaoDeIntencao e o numeroDoModulo da tabela AcaoAtividade!
edmarr
Como nao sei o relacionamento entre as suas tabelas , acho q ta na hora de vc parar eh pensar um pouquinho ( ps nao eh uma critica eh sim uma sugestão ) pois ensinei o caminho agora ir andando ai ja eh com vc .
rodrigo.fai
Mais eu postei qual é o relacionamento entra as tabelas, acho que vc nao notou!!!
É a seguinte:
A tabela Projeto tem um relacionamento “OneToOne” com a AcaoAtividadeDaRelacaoDeIntencao, que por sua vez têm um relacionamento “ManyToOne” com a tabela AcaoAtividade.
edmarr
Eu ja lhe ensinei o caminho , creio q esta na hora de vc colocar esta massa cinzenta pra funcionar pois nao tenho acesso a estrutura das suas entidades para lhe ajudar com mais clareza .