cloudfier
cloudfier copied to clipboard
query generation must deal with operation and local var references in query criteria
java.lang.IllegalArgumentException: org.hibernate.QueryException: Not all named parameters have been set: [systemUser] [SELECT DISTINCT tarefa_ FROM Tarefa tarefa_ WHERE tarefa_.responsavel = :systemUser AND tarefa_.estado = 'EmAberto']
static query minhasEmAberto() : Tarefa[*];
begin
return Tarefa extent.select((t : Tarefa) : Boolean {
t.responsavel == System#user() and t.estado == Estado#EmAberto
});
end;
public Collection<Tarefa> minhasEmAberto() {
return getEntityManager().createQuery(
"SELECT DISTINCT tarefa_ FROM Tarefa tarefa_ WHERE tarefa_.responsavel = :systemUser AND tarefa_.estado = 'EmAberto'", Tarefa.class
).getResultList();
}
Changing it to:
static query minhasEmAberto() : Tarefa[*];
begin
var currentUser;
currentUser := System#user();
return Tarefa extent.select((t : Tarefa) : Boolean {
t.responsavel == currentUser and t.estado == Estado#EmAberto
});
end;
does not help, and causes another issue ("mdd_types.SystemUser cannot be resolved to a type"):
public Collection<Tarefa> minhasEmAberto() {
mdd_types.SystemUser currentUser = getCurrentUser();
return getEntityManager().createQuery(
"SELECT DISTINCT tarefa_ FROM Tarefa tarefa_ WHERE tarefa_.responsavel = :currentUser AND tarefa_.estado = 'EmAberto'", Tarefa.class
).getResultList();
}
Workaround refactor the query to always take parameters for all non-DB data needs, and then create another query that just invokes it with the correct values.