hibernate - hql select attribute null in tables -
i have 2 entities empleado , cargo :
@entity @table(name = "empleado") public class empleado { private integer id; private string nombre; private string codigo; private cargo cargo; @id @column(name = "id") @sequencegenerator(name = "seq", sequencename = "empleado_id_seq",allocationsize=1) @generatedvalue(strategy = generationtype.sequence, generator = "seq") public integer getid() { return id; } public void setid(integer id) { this.id = id; } @column(name = "nombre") public string getnombre() { return nombre; } public void setnombre(string nombre) { this.nombre = nombre; } @column(name = "codigo") public string getcodigo() { return codigo; } public void setcodigo(string codigo) { this.codigo = codigo; } @manytoone @joincolumn(name = "id_cargo_empresa") public cargo getcargo() { return cargo; } public void setcargo(cargo cargo) { this.cargo = cargo; }
}
@entity @table(name = "cargo") public class cargo implements serializable { private integer id; private string nombre; private string descripcion; @id @column(name = "id") @sequencegenerator(name = "seq", sequencename = "cargo_id_seq",allocationsize=1) @generatedvalue(strategy = generationtype.sequence, generator = "seq") public integer getid() { return id; } public void setid(integer id) { this.id = id; } @column(name = "nombre") public string getnombre() { return nombre; } public void setnombre(string nombre) { this.nombre = nombre; } @column(name = "descripcion") public string getdescripcion() { return descripcion; } public void setdescripcion(string descripcion) { this.descripcion = descripcion; }
and want following query in hql :
@override public list<empleadodto> obtenerlstempleado() { stringbuilder sbquery = new stringbuilder(); sbquery.append("select new com.consorciojm.rrhh.empleado.util.empleadodto("); sbquery.append("e.id,e.codigo,e.nombre,e.apellidopaterno,e.apellidomaterno,"); sbquery.append("e.dni,e.telefono,e.celular,e.cargo.id,e.cargo.nombre) "); sbquery.append("from empleado e e.codigo not null "); list<empleadodto> lstempleado = sessionfactory.getcurrentsession().createquery(sbquery.tostring()).list(); return lstempleado; }
but there records in empleado have null in attribute cargo (id_cargo_empresa = null), need query return result e.cargo.id = null , e.cargo.nombre, in way records empleado data in cargo or null. query put above doesn't return because cargo null , e.cargo.nombre can not returned.
using e.cargo.nombre creates implicit inner join. filters out empleados null cargo. want left join:
select ..., cargo.nombre from empleado e left koin e.cargo cargo e.codigo not null
also note using stringbuilderto create query both less readable, , less efficient concatenating parts using +
(the compiler concatenate parts , store full query in class, instead of concatenating @ runtime).
Comments
Post a Comment