Home > front end >  NamedQuery returning entities with null fields
NamedQuery returning entities with null fields

Time:12-31

defined entity with namedquery as SELECT mdl FROM tbl_slots mdl where mdl.test_date between :dt and :dt order by mdl.test_time asc

if used * instead of mdl in query, JPA gives error unexpected token: *

if mentioned the column names in select statement it returns entities with respective fields populated with expected values

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

how to get same result without mentioning column names in select statement as if used *?

what's valid JPQL or HQL for select * from table query?

Entity class

@Table(name = "tbl_slots")
@NamedQueries({
    @NamedQuery(name="slots",query = "SELECT mdl FROM tbl_slots mdl where  mdl.test_date between :dt and :dt order by mdl.test_time asc")
})
public class TblSlots implements Serializable {
    private Long srNo;
    private Date testDt;
    private String testTime;
        
    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;
    }

CodePudding user response:

You can not use '*', Because Hibernate is turning objects. If you want to use *, Use @NamedNativeQuery not @NamedQuery

@NamedQueries({
    @NamedQuery(name="slots",query = "SELECT mdl FROM Member mdl ")
})
// Use this
@NamedNativeQueries({
    @NamedNativeQuery(name="slots_native",query = "SELECT * FROM Member mdl ",resultClass = MemberEntity.class)
})

Reference @NamedNativeQuery

CodePudding user response:

JPQL understand java entities and not columns.

how to get same result without mentioning column names in select statement as if used *?

what's valid JPQL or HQL for select * from table query?

So a valid JQPL SELECT query can even not have the SELECT clause.

The following would be a valid JPQL query to return the complete entities from that table

FROM tbl_slots mdl where  mdl.test_date between :dt and :dt order by mdl.test_time asc

So your annotation could be written as

@NamedQueries({
    @NamedQuery(name="slots",query = "FROM tbl_slots mdl where  mdl.test_date between :dt and :dt order by mdl.test_time asc")
})
  • Related