preciso montar uma query usando Hql para retornar umas informações mais não sei como faço para montar…
fiz conforme esta abaixo mais esta me retornando um erro que não pode executar a query
alguém pode ajudar
StringBuildersql=newStringBuilder("from UsuarioTO a join a.associacoesCadastro ");sql.append("WHERE a.codBarras like 'S-%' and a.ID_SITUACAO_CADASTRAL = 1 AND ");sql.append("LEFT(associacao.dtCadastroSupervisor, 10) = '"+newSimpleDateFormat("yyyy-MM-dd").format(data)+"'");Queryquery=session.createQuery(sql.toString());resultado=query.list();
amigo, para começar nao concatene os parametros da query use o “?” no lugar da concatenação e chame o metodo setParameter do obj query para passar o valor…
poste suas classes presentes na query e o erro.
abrasss
rafaelsantini
Para entender melhor o seu problema, é interessante postar também o mapeamento das entidades e o erro que está sendo apresentado. Mas pelo que observei na sua query, acho que você está misturando as coisas, fazendo referência aos campos do banco de dados em vez dos objetos. Por exemplo, o nome da sua classe chama-se UsuarioTO e tem uma propriedade chamada ID_SITUACAO_CADASTRAL?
R
robsonsan
Renan eu alterei alguns detalhes ai mais aqui esta a query com a alteração
StringBuildersql=newStringBuilder("from UsuarioTO a join a.associacoesCadastro ");sql.append("where a.codBarras like 'S-%' and a.estado = "+SituacaoCadastral.ATIVO);sql.append(" LEFT(associacao.dtCadastroSupervisor, 10) = '"+newSimpleDateFormat("yyyy-MM-dd").format(data)+"'");
a classe SituacaoCadastral e um enum
que esta assim ATIVO("Ativo", 1),
14:25:24,156ERROR[STDERR]org.hibernate.hql.ast.QuerySyntaxException:unexpectedtoken:LEFTnearline1,column127[from com.oesia.parkingrio.usuario.to.UsuarioTO a join a.associacoesCadastro where a.codBarras like 'S-%' and a.estado = Ativo LEFT(associacao.dtCadastroSupervisor, 10) = '2009-06-22']
renanreismartins
amigo acho que vc nao entendeu…
nao use concatenação dos parametros na sua query, faça algo como
Query q = session.createQuery("SELECT u FROM Usuario u WHERE u.login = :login")
q.setParameter("login", "renanreismartins");
q.list();
no seu atributo de data nao precisa fazer esse left, passe um tipo Date e na setagem de parametro especifique ele como TemporalType.DATE
velho da certo sim eh soh da uma estudadinha que vai… NAO EXISTE COISA MAIS FEIA que esse lance de fica concatenando String pra monta os parametros da query.
Se acha mais facil tente montar sua query com Criteria entao… mas misturar os dois fica estranho.
edit-----
posta o erro que aconteceu qdo vc fez setando o parametro pelo metodo
edit-----
abrassss
R
robsonsan
consegui feras vou postar aqui para futuras duvidas
valeu a todos
StringBuilder sql = new StringBuilder("from UsuarioTO a inner join fetch a.associacoesSupervisor as s ");
sql.append("where a.codBarras like 'S-%' and a.estado = 1 ");
sql.append("and s.dtDevolucaoSupervisor BETWEEN :dtInicial AND :dtFinal" );
Query query = session.createQuery(sql.toString());
Date dtInicial = (Date)data.clone();
dtInicial.setHours(00);
dtInicial.setMinutes(00);
dtInicial.setSeconds(00);
Date dtFinal = (Date)data.clone();
dtFinal.setHours(23);
dtFinal.setMinutes(59);
dtFinal.setSeconds(59);
query.setParameter("dtInicial", dtInicial);
query.setParameter("dtFinal", dtFinal);
resultado = query.list();