Reputation: 53
Retrieving integer value from table using Hibernate, following exception occurred,
java.lang.ClassCastException: java.lang.Integer cannot be cast to pojo.Datasetstatus
String q1="SELECT datasetstatusID from datasetstatus where DatasetID='"+meta_dataset+"'";
Query query=session.createSQLQuery(q1);
List<Datasetstatus> dobj=query.list();
for(Datasetstatus dobj1: dobj) {
System.out.println("Value :: "+dobj1.getDatasetStatusId());
}
Pojo class format,
public class Datasetstatus implements java.io.Serializable {
private Integer datasetStatusId;
private String datasetId;
public Datasetstatus(String datasetId) {
this.datasetId = datasetId;
}
public Integer getDatasetStatusId() {
return this.datasetStatusId;
}
public void setDatasetStatusId(Integer datasetStatusId) {
this.datasetStatusId = datasetStatusId;
}
public String getDatasetId() {
return this.datasetId;
}
public void setDatasetId(String datasetId) {
this.datasetId = datasetId;
}
}
If any suggestions for solving this problem
Upvotes: 2
Views: 968
Reputation: 1722
If you are retrieving the single column value then ideally you should not go for POJO Class instead of that you can directly cast it to List<Integer>
List<Integer> dobj = query.list();
for(Integer dobj1: dobj) {
System.out.println("Value :: "+dobj1);
}
This will solve your problem
Upvotes: 0
Reputation: 2426
You are access particular attribute from the pojo class not an pojo object, then only you are facing java.lang.Integer cannot be cast to pojo.Datasetstatus
you can try,
String q1="SELECT a from datasetstatus as a whereDatasetID='"+meta_dataset+"'";
Query query=session.createQuery(q1);
List<Datasetstatus> dobj=(List<Datasetstatus>) query.list();
for(Datasetstatus dobj1: dobj) {
System.out.println("Value :: "+dobj1.getDatasetStatusId());
}
if you try the above code you will get a answer. or you can try below code as well,
String q1="SELECT a.datasetstatusID from datasetstatus as a whereDatasetID='"+meta_dataset+"'";
Query query=session.createSQLQuery(q1);
List<Object[]> dobj=query.list();
for(Object dobj1: dobj) {
System.out.println("Value :: "+dobj1.get[0]);
}
Upvotes: 1
Reputation: 153700
You need to change your query to this:
List<Integer> dobj=
(List<Integer>) session.createSQLQuery(
"SELECT ds.datasetstatusID " +
"from datasetstatus ds " +
"where ds.datasetId = :dataSetId")
.setParameter("dataSetId", meta_dataset)
.list();
The datasetstatusID
is an integer not a Datasetstatus
.
If you want to return Datasetstatus
instead, the your query would be:
List<Datasetstatus> dobj=
(List<Datasetstatus>) session.createSQLQuery(
"SELECT ds " +
"from datasetstatus ds " +
"where ds.datasetId = :dataSetId")
.setParameter("dataSetId", meta_dataset)
.list();
Upvotes: 1
Reputation: 520908
There appears to be a problem with your query. You used the following SQL:
SELECT datasetstatusID from datasetstatus where DatasetID = meta_dataset
But you should be using HQL instead:
from datasetstatus d where d.datasetID = meta_dataset
Here is your modified code:
String q1 = "from datasetstatus d where d.datasetID = :datasetID";
Query query = session.createSQLQuery(q1)
.setParameter("datasetID", meta_dataset);
List<Datasetstatus> dobj = query.list();
for (Datasetstatus dobj1 : dobj) {
System.out.println("Value :: " + dobj1.getDatasetStatusId());
}
Upvotes: 1