[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
Erro ao fazer update [RESOLVIDO]  XML
Índice dos Fóruns -> Dúvidas
Autor Mensagem
Tchaco
Equipe

Membro desde: 18/02/2009 22:17:16
Mensagens: 9
Offline

Bom dia pessoal.
Estou gostando mto de usar o Neo. Parabéns.

Estou tentando fazer update em uma tabela sem mto sucesso, entao gostaria de uma ajudinha de vcs.

Tenho o codigo
Code:
 String sql = "update LancCred lancCred 
 inner join Conta conta on conta.con_id = lancCred.conta
 set bloqueado = ?
 where dataLanc >= ? and dataLanc <= ? and conta.con_usuario = ?";
 
 getHibernateTemplate().bulkUpdate(sql, new Object[] { bloqueado, dataInicial, dataFinal, usuario }); 
 


So que nao faz update, da a mensagem de erro: unexpected token inner
Se eu pegar a sentença e rodar no gerenciador do banco, faz o update nas colunas.

O que poderia estar errado??

Desde ja agradeço.
giovanejfreitas
Equipe
[Avatar]
Membro desde: 13/10/2009 16:02:13
Mensagens: 7
Localização: Belo Horizonte
Offline

Bom dia,

Este erro ocorre porque o Hibernate tem uma limitação no update, você não pode fezer join em update e delete. Outro ponto que daria erro também é que, em joins no hibernate você não especifica a condição usando o "ON".

para fazer joind de Pessoa com endereço por exemplo seria apenas:

Code:
 from Pessoa p join p.endereco;
 


Esta consulta faria um inner join de Pessoa com Endereco usando corretamente a chave primária e a foreign key.

Se eu quisesse alterar todas as pessoas de um determinado bairro teria de fazer:

Code:
 update Pessoa p set p.preferencial = ? where p.endereco.id in (select  e.id from Endereco e where e.bairro = ?) 
 


Observe que o p.endereco.id e o e.id se refere a foreign key e a primary key respectivamente, o Hibernate usa o atributo id para referenciar a propriedade que possui a annotation @Id independente do seu nome real que poderia ser cdendereco ou idendereco ou até mesmo id.

Se não conseguir resolver sua consulta, por favor dê mais detalhes de suas classes, pois não dá pra saber de qual classe é cada propriedade em sua consulta e qual é o tipo de relacionamento.

Atenciosamente,
Giovane Freitas
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

Olá Tchaco,

uma outra opção que voce teria, já que está utilizando uma query SQL do banco de dados é utilizar o método

Code:
getJdbcTemplate()


Com ele voce pode executar queries SQL diretamente no banco de dados, sem passar pelo hibernate.

Mas seria interessante sempre que possível utilizar o hibernate para suas queries, pois uma alteração no mapeamento, nao afetaria tanto as queries.
Tchaco
Equipe

Membro desde: 18/02/2009 22:17:16
Mensagens: 9
Offline

Fiz igual ao seu exemplo e deu certo.

Code:
 String sql = "update LancCred lancCred set lancCred.bloqueado = ? where lancCred.dataLanc >= ? and lancCred.dataLanc <= ? and lancCred.conta.id in (select conta.id from Conta conta where conta.usuario = ?)";
 
 getHibernateTemplate().bulkUpdate(sql, new Object[] { status, dataIni, dataFim, usuario });
 


Valeu, obrigado.
giovanejfreitas
Equipe
[Avatar]
Membro desde: 13/10/2009 16:02:13
Mensagens: 7
Localização: Belo Horizonte
Offline

Para usar o getJdbcTemplate() é preciso ter uma atenção especial, pois poderá executar o comando em uma transação separada. Recomendo o uso de NamedQueries para executar comandos que devem obrigatoriamente ser escritos em SQL puro, pois as named queries são executadas pelo hibernate e logo ficam dentro da mesma transação quando se faz o uso do TransactionTemplate.
robson_goncalves
Equipe

Membro desde: 14/10/2011 11:14:33
Mensagens: 1
Offline

Olá pessoal,

parabens pelo framework !!

Sou Analista da Unipampa onde utilizamos o GEPLANES e agora estou realizando testes com o NEOFRAMEWORK para adota-lo nas aplicações desta universidade.

Duvida, quando clico no botao Salvar no exemplo TesteNeo, em algum momento entre o formbean está perdendo o id da pessoa.
No metodo doSalvar da CrudController, o objeto form está vindo com o cdusuario = null. Alguem de vcs poderiam me informar o que pode estar acontecendo ? ou onde o FORMBEAN é setado.


public ModelAndView doSalvar(WebRequestContext request, FORMBEAN form) throws CrudException {
BEAN bean = null;
try {
bean = formToBean(form);
salvar(request, bean);
} catch (Exception e) {
throw new CrudException(SALVAR, e);
}
return getSalvarModelAndView(request, bean);
}

Abração a todos
 
Índice dos Fóruns -> Dúvidas
Ir para:   
Powered by JForum 2.1.7 © JForum Team