es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

NamedQuery que devuelve entidades con campos nulos.

Entidad definida con namedquery como SELECT mdl FROM tbl_slots mdl where mdl.test_date between :dt and :dt order by mdl.test_time asc

si se utiliza * en lugar de mdl en la consulta, JPA da error token inesperado: *

si se mencionan los nombres de las columnas en la sentencia select, devuelve entidades con los campos respectivos llenos con los valores esperados

[{
“srNo”: 1,
“testDate”: “2021-Dec-30”,
“testTime”: “09:00-10:00”,
},{
“srNo”: 2,
“testDate”: “2021-Dec-30”,
“testTime”: “11:00-12:00”,
}]

¿Cómo obtener el mismo resultado sin mencionar los nombres de las columnas en la sentencia select como si se utilizara *?

¿Cuál es el JPQL o HQL válido para la consulta select * from table?

Clase de entidad
“`@Entity
@Table(name = "tbl<em>slots")
@NamedQueries({
@NamedQuery(name="slots",query = "SELECT mdl FROM tbl</em>slots mdl where mdl.test<em>date between :dt and :dt order by mdl.test</em>time asc")
})
public class TblSlots implements Serializable {
private Long srNo;
private Date testDt;
private String testTime;</p>

<pre><code>public TblSlots() {}
public TblSlots(Long srNo, Date testDt, String testTime) {
this.srNo = srNo;
this.testDt = testDt;
this.testTime = testTime;
}

@Id
@Column(name = "sr_no", unique = true, nullable = false, precision = 16, scale = 0)
public Long getSrNo() {
return this.srNo;
}

public void setSrNo(Long srNo) {
this.srNo = srNo;
}

@Temporal(TemporalType.DATE)
@Column(name = "test_date", nullable = false, length = 13)
public Date getTestDt() {
return this.testDt;
}

public void setTestDt(Date testDt) {
this.testDt = testDt;
}

@Column(name = "test_time", nullable = false, length = 20)
public String getTestTime() {
return this.testTime;
}

public void setTestTime(String testTime) {
this.testTime = testTime;
}
</code></pre>

“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el mismo resultado sin mencionar los nombres de las columnas en la instrucción SELECT, puedes usar la expresión constructor en JPQL o HQL. Esto te permite seleccionar todas las columnas y mapearlas a una entidad sin especificar cada nombre de columna individualmente.

    La JPQL o HQL válida para la consulta select * from table usando expresiones constructoras sería:

    SELECT new TblSlots(mdl.srNo, mdl.testDt, mdl.testTime) FROM TblSlots mdl WHERE mdl.testDt BETWEEN :dt AND :dt ORDER BY mdl.testTime ASC

    Esto seleccionará todas las columnas de la entidad TblSlots y las mapeará a una nueva instancia de esa entidad, sin tener que especificar cada nombre de columna por separado.

    Ten en cuenta que al usar expresiones constructoras, la clase de la entidad debe tener un constructor que acepte las columnas seleccionadas en el mismo orden en que aparecen en la consulta, como se muestra en el constructor de TblSlots.

Comments are closed.