当前位置: 首页 > 知识库问答 >
问题:

HiberNate MYSQL本机查询抛出ClassCastExc的问题

干高歌
2023-03-14

使用HiberNate从表中检索整数值,发生以下异常,

java.lang.ClassCastException:java.lang.Integer 不能强制转换为 pojo。数据集状态

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;
    }
}

如果有任何解决此问题的建议

共有3个答案

西门京
2023-03-14

您访问的是pojo类的特定属性,而不是pojo对象,那么只有您面对的是<code>java.lang.Integer不能强制转换为pojo。数据集状态您可以尝试,

 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]);
       }
姜泰宁
2023-03-14

您的查询似乎有问题。您使用了以下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());
}
毛勇
2023-03-14

您需要将查询更改为:

List<Integer> dobj=
    (List<Integer>) session.createSQLQuery(
        "SELECT ds.datasetstatusID " +
        "from datasetstatus ds " +
        "where ds.datasetId = :dataSetId")
    .setParameter("dataSetId", meta_dataset)
    .list();

datasetstatusID是一个整数,而不是Datasetstatus

如果您想返回DatasetState,您的查询将是:

List<Datasetstatus> dobj=
    (List<Datasetstatus>) session.createSQLQuery(
    "SELECT ds " +
    "from datasetstatus ds " +
    "where ds.datasetId = :dataSetId")
.setParameter("dataSetId", meta_dataset)
.list();
 类似资料:
  • 有2件事我想做mysql数据库从hibernate.cfg.xml; > 使用utf8字符,这样它就可以保存字符 č,ć,ž,đ,š 并在挂毯应用程序中重新使用它们。 修复了com.mysql.jdbc.exceptions.jdbc4. MySQLNon瞬态连接异常 连接关闭后不允许任何操作。由于底层异常/错误,连接被隐式关闭:**BEGIN NESTED EXCEPTION**com.mysq

  • 我的所有存储库都在扩展commonService存储库,而commonService存储库反过来也在扩展JpaRepository和JpaSpecification 我想在CommonReadRepository中定义原生Sql查询,如:mysql:select*from table limit 1,20; @Query(value=“Select*from?1 limit?2,?3”,nativ

  • 在我的中,我有以下关系: 在我的中,我现在希望通过按和搜索来获得特定的-我尝试通过: 当我在数据库(H2)中使用这个查询时,它可以工作,但在Java中,我会遇到以下异常: javax.Persistence.persistenceException:Exception[EclipseLink-4002](Eclipse Persistence Services-2.5.0.v20130507-3F

  • 是我的服务方式 } 2018-10-04 17:15:44.452 WARN 64056---[nio-8080-exec-4]O.s.web.servlet.PageNotFound:不支持请求方法“Post”2018-10-04 17:15:44.452 WARN 64056---[nio-8080-exec-4].w.s.m.s.DefaultHandlerExceptionResolver

  • 我想在我的repo中写一个本机查询“Select*in from table”。表名与实体名不同。 运行查询时, 1如果我把实体名称返回表未找到。 2如果我将表名放在查询中,则查询的验证失败。 问题是 如果我使用"Select*from TariffPacks r2..., nativeQuery=true",我得到错误TariffPacks不存在。如果我使用"Select*from RECHAR