Hibernate MYSQL 原生查询抛出 ClassCastException
Posted
技术标签:
【中文标题】Hibernate MYSQL 原生查询抛出 ClassCastException【英文标题】:Hibernate MYSQL native query throws ClassCastException 【发布时间】:2015-07-15 00:19:26 【问题描述】:使用 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;
如果有解决这个问题的建议
【问题讨论】:
您能否更新您的代码,向我们展示 Pojo 类的所有注释?您的代码在哪一行崩溃? for(Datasetstatus dobj1: dobj) System.out.println("Value :: "+dobj1.getDatasetStatusId()); ,我检查了 for 循环上的代码崩溃(元素检索整数格式) 【参考方案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());
【讨论】:
【参考方案2】:您需要将查询更改为:
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();
【讨论】:
【参考方案3】:你是从 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]);
【讨论】:
Senthil 将我添加到聊天室后创建聊天室,我无法创建聊天室,需要 100 声望点 Senthil 我检查了第一个代码不工作它抛出 java.lang.ClassCastException【参考方案4】:如果您要检索单列值,那么理想情况下,您不应该使用 POJO 类,而是可以直接将其转换为 List
List<Integer> dobj = query.list();
for(Integer dobj1: dobj)
System.out.println("Value :: "+dobj1);
这会解决你的问题
【讨论】:
我检查了你的代码,但没有工作。发生异常“无法提取结果集”以上是关于Hibernate MYSQL 原生查询抛出 ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章