在发生异常后,使用Hibernate从表中检索整数值,
java.lang.ClassCastException:java.lang.Integer无法强制转换为 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类格式,
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;
}
}
如果有任何解决此问题的建议
答案 0 :(得分:1)
您的查询似乎有问题。您使用了以下SQL:
SELECT datasetstatusID from datasetstatus where DatasetID = meta_dataset
但你应该使用HQL:
from datasetstatus d where d.datasetID = meta_dataset
以下是您修改后的代码:
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());
}
答案 1 :(得分:1)
您需要将查询更改为:
List<Integer> dobj=
(List<Integer>) session.createSQLQuery(
"SELECT ds.datasetstatusID " +
"from datasetstatus ds " +
"where ds.datasetId = :dataSetId")
.setParameter("dataSetId", meta_dataset)
.list();
datasetstatusID
是一个不是Datasetstatus
的整数。
如果您想要返回Datasetstatus
,您的查询将是:
List<Datasetstatus> dobj=
(List<Datasetstatus>) session.createSQLQuery(
"SELECT ds " +
"from datasetstatus ds " +
"where ds.datasetId = :dataSetId")
.setParameter("dataSetId", meta_dataset)
.list();
答案 2 :(得分:1)
您从pojo类访问特定属性而不是pojo对象,然后只有您可以尝试java.lang.Integer cannot be cast to pojo.Datasetstatus
,
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());
}
如果您尝试上述代码,您将得到答案。或者您也可以尝试下面的代码,
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]);
}
答案 3 :(得分:0)
如果您要检索单列值,那么理想情况下您不应该使用POJO Class而不是直接将其转换为 List&lt; Integer&gt;
List<Integer> dobj = query.list();
for(Integer dobj1: dobj) {
System.out.println("Value :: "+dobj1);
}
这将解决您的问题