Autor |
Mensagem |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 29/10/2009 11:41:29
|
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.
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 29/10/2009 12:53:30
|
giovanejfreitas
Equipe
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
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 29/10/2009 13:50:01
|
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:
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.
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 29/10/2009 13:50:28
|
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.
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 29/10/2009 16:00:30
|
giovanejfreitas
Equipe
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.
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/10/2011 15:52:52
|
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
|
|
 |
|