Estou depurando um sistema no seguinte código:
String hql = "select me from MobilidadeEstudantil me where me.discente.id = ? and me.ativo = trueValue() ";
hql += " and "+ano+""+periodo+" between soma_semestres(ano,periodo,0) and soma_semestres(ano,periodo,numero_periodos-1)) ";
Query q = getSession().createQuery(hql);
q.setInteger(0, discente.getId()).setMaxResults(1);
return (q != null && !q.list().isEmpty());
o erro apresentado é: org.postgresql.util.PSQLException: ERRO: fun??o soma_semestres(integer, integer, integer) n?o existe at
pelo que entendi a função soma_semestres não existe e eu não sei onde ela deveria estar;
Minha duvida é simples:
Onde ficam registradas essas funções?
ha alguma correspondência com funções na classe java?
essas função são store_procedures?
Alguem tem alguma pista?
Você não tem como acessar essa função por HQL.
Ou você faz esse código no Java, ou então você utilizar NativeQuery e não Query apenas (como você está fazendo).
Esse post mostra como utilizar native query: JPA Consultas e Dicas.
Ola,
Isso é um tipo de sistema que ja foi comprado assim. Talvez você não tenha entendido.
Existe uma função “soma_semestres(ano,periodo,0)” sendo chamada na query HQL. Como se pode ver no codigo abaixo.
String hql = "select me from MobilidadeEstudantil me where me.discente.id = ? and me.ativo = trueValue() ";
hql += " and "+ano+""+periodo+" between soma_semestres(ano,periodo,0) and soma_semestres(ano,periodo,numero_periodos-1)) ";
Query q = getSession().createQuery(hql);
q.setInteger(0, discente.getId()).setMaxResults(1);
return (q != null && !q.list().isEmpty());
E existe tambem uma funcao java em um classe que me parece que faz a mesma coisa.
public static Integer somaSemestres(Integer ano, Integer semestre, Integer qtdSemestres) {
...
E eu preciso saber se essa função no HQL é relacionada com alguma função java
ou se ela é definida no banco?
Minha duvida poder ser boba. mas eu não consegui localizar pistas dessa função e sua definição.
Do modo como está, no banco.
OBS.: Esse código aí está aberto para ataque hacker de HqlInjection. Tome cuidado.
sem querer ser ou parecer rude (afinal ninguém tem obrigação de responder/ajudar a ninguém)
eu fui bem especifico no que eu quero saber, se entendeu e sabe o que eu quero e pode ajudar faça
senão ignore o post.
[quote=sixrock6]Ola,
Isso é um tipo de sistema que ja foi comprado assim. Talvez você não tenha entendido.
Existe uma função “soma_semestres(ano,periodo,0)” sendo chamada na query HQL. Como se pode ver no codigo abaixo.
String hql = "select me from MobilidadeEstudantil me where me.discente.id = ? and me.ativo = trueValue() ";
hql += " and "+ano+""+periodo+" between soma_semestres(ano,periodo,0) and soma_semestres(ano,periodo,numero_periodos-1)) ";
Query q = getSession().createQuery(hql);
q.setInteger(0, discente.getId()).setMaxResults(1);
return (q != null && !q.list().isEmpty());
E existe tambem uma funcao java em um classe que me parece que faz a mesma coisa.
public static Integer somaSemestres(Integer ano, Integer semestre, Integer qtdSemestres) {
...
E eu preciso saber se essa função no HQL é relacionada com alguma função java
ou se ela é definida no banco?
Minha duvida poder ser boba. mas eu não consegui localizar pistas dessa função e sua definição.
[/quote]
Se existe a função no java, e o objetivo é usar essa função do java, o HQL esta errado. Coloque aspas para fechar o between, e chama a função do java concatenando com +.
…between " + soma_semestres(ano,periodo,0) + "and " …
[quote=sixrock6]sem querer ser ou parecer rude (afinal ninguém tem obrigação de responder/ajudar a ninguém)
eu fui bem especifico no que eu quero saber, se entendeu e sabe o que eu quero e pode ajudar faça
senão ignore o post.
[/quote]Sem querer ou parecer rude, eu respondi o que você perguntou. vc não viu? [quote=sixrock6]E eu preciso saber se essa função no HQL é relacionada com alguma função java
ou se ela é definida no banco?
Minha duvida poder ser boba. mas eu não consegui localizar pistas dessa função e sua definição.
[/quote][quote=jakefrog]Do modo como está, no banco.[/quote]
orogerio
no 1º momento eu ate pensei em substituir igual vc falou. mas ai vi mais 3 ou 4 ocorrência dela em outros HQL do sistema.
Não cogitei o fato do HQL estar errado.
Com base no vc disse que ha erro no HQL e que não ha um lugar onde essas funções devam ser definidas ou associadas a funções existente.
vou abrir um chamado para a empresa que vendeu o sistema.
jakefrog
se a resposta ta link vou olhar depois mais detalhadamente.
desculpe qualquer mal entendido.
Obrigado a todos