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

springboot存储库jpa ClassCastException

壤驷经国
2023-03-14

我有一个springboot项目,为了执行请求,我正在连接到我的mysql数据库。我有一个实体ExportBatch:

@Entity(name = "Exportbatch")
@Table(name = "exportbatch")
public class Exportbatch
{
@EmbeddedId
private ExportbatchId id;

@Column(name = "container")
private String container;

@Column(name = "serverurl")
private String serverURL;

@Column(name = "owner")
private String owner;

@Column(name = "batchlastupdate")
private String batchlastupdate;

@Column(name = "size")
private int size;

public Exportbatch()
{

}

public Exportbatch(ExportbatchId id, String container, String serverURL, String owner, String date, int size)
{
    this.id = id;
    this.container = container;
    this.serverURL = serverURL;
    this.owner = owner;
    this.batchlastupdate = date;
    this.size = size;

}

public ExportbatchId getId()
{
    return id;
}

public void setId(ExportbatchId id)
{
    this.id = id;
}

public String getContainer()
{
    return container;
}

public void setContainer(String container)
{
    this.container = container;
}

public String getServerURL()
{
    return serverURL;
}

public void setServerURL(String serverURL)
{
    this.serverURL = serverURL;
}

public String getOwner()
{
    return owner;
}

public void setOwner(String owner)
{
    this.owner = owner;
}

public String getBatchlastupdate()
{
    return batchlastupdate;
}

public void setBatchlastupdate(String batchlastupdate)
{
    this.batchlastupdate = batchlastupdate;
}

public int getSize()
{
    return size;
}

public void setSize(int size)
{
    this.size = size;
}

public String toString()
{
    String string = "project name: " + this.id.getProjectname() + "\n" + "building id: " + this.id.getBuildingId()
            + "\n" + "container id: " + this.container + "\n" + "hemis url: " + this.serverURL + "\n"
            + "lastTimeUpdate: " + this.batchlastupdate;

    return string;
}
@Embeddable
public class ExportbatchId implements Serializable
{

private static final long serialVersionUID = 1L;

@Column(name = "projectname")
private String projectname;

@Column(name = "buildingid")
private String buildingId;

@Column(name = "timestamp")
private Timestamp timestamp;

public ExportbatchId(String projectname, String buildingId, Timestamp timestamp)
{
    this.projectname = projectname;
    this.buildingId = buildingId;
    this.timestamp = timestamp;
}

public ExportbatchId()
{

}

public String getProjectname()
{
    return projectname;
}

public void setProjectname(String projectname)
{
    this.projectname = projectname;
}

public String getBuildingId()
{
    return buildingId;
}

public void setBuildingId(String buildingId)
{
    this.buildingId = buildingId;
}

public Timestamp getTimestamp()
{
    return timestamp;
}

public void setTimestamp(Timestamp timestamp)
{
    this.timestamp = timestamp;
}
}

我在ExportBatchRepository中定义了一个新方法

public interface ExportbatchRepository extends JpaRepository<Exportbatch, ExportbatchId>
{

@Query(value = "select id.buildingId, id.projectname, id.timestamp, container, serverURL, owner, batchlastupdate, size,  max(timestamp)  from Exportbatch group by id.buildingId")
List<Exportbatch> findlatest();

Page<Exportbatch> findAll(Pageable pageable);
}

在我的控制器里,我是这样做的:

@RestController
public class Controller
{

@Autowired // This means to get the bean called userRepository
// Which is auto-generated by Spring, we will use it to handle the data
private ExportbatchRepository exportbatchRepository;

@RequestMapping("/getlastbatchsproblemes")
public void getbatchinfo()
{
    try
    {
        List<Exportbatch> list = exportbatchRepository.findlatest();

        for (Exportbatch exportbatch : list)
        {
            // System.out.println(exportbatch.getBatchlastupdate());
            System.out.println(exportbatch.toString());
        }

        System.out.println(list.size());
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
}
}

当我调用“/GetLastBatchsProblemes”时会遇到这个异常:java.lang.ClassCastException:[Ljava.lang.Object;不能强制转换为Example.Domain.ExportBatch。

为什么我会得到这个例外,有人能帮我吗?

共有1个答案

莫典
2023-03-14

我认为问题出在您的查询中,请记住jpql要求您在表中加上一个别名,并且该别名应该在每个字段中使用,请尝试以下操作:

@Query(value = "select ex.id.buildingId, ex.id.projectname, ex.id.timestamp, ex.container, ex.serverURL, ex.owner, ex.batchlastupdate, ex.size,  max(ex.id.timestamp)  from Exportbatch ex group by ex.id.buildingId") 
List<Exportbatch> findlatest();

把注意力放在前任身上。在检索的每个字段的开始,并作为from部分中的别名。

 类似资料:
  • 我不能在我的服务课上用我的积垢。我可以创建存储库,但当我将其自动连接到我的服务类时,会出现以下错误: com中构造函数的参数0。测验服务testService需要“com”类型的bean。测验存储库。找不到TestRepository“”。 行动: 考虑定义COM类型的bean。测验存储库。配置中的TestRepository。 这对许多人来说似乎是一个大问题。我尝试了各种东西,如@Compone

  • 我与SpringBoot和JPA合作。我收到一个无法完成的错误。 这是我的主要课程: 这是我的班级失败的原因: 这是类: 这是错误消息: 错误创建bean的名称'请求LoggerImpl':注入自动生成的依赖失败; 无法自动关联字段:专用com。存储库。请求logdao.com。记录器。impl。RequestLoggerImpl。请求logdao;嵌套的异常是org。springframewor

  • 搜索仓库和镜像 你可以使用 Docker 来搜索所有公开可用的仓库和镜像。 $ docker search ubuntu 这将通过 Docker 提供的关键字匹配来显示您可用的仓库列表。 私有仓库将不会显示到仓库搜索结果上。你可以通过 Docker Hub 的简况页面来查看仓库的状态。 仓库 你的 Docker Hub 仓库有许多特性。 stars 你的仓库可以用星被标记,你也可以用星标记别的仓

  • 问题内容: 我正在尝试为视图创建JPA实体。在数据库层中,表和视图应该相同。 但是,问题开始出现并且有两个方面: 尝试设置正确的注释时。视图没有与之关联的主键,但是如果没有对字段进行适当的注释,则会在运行时引发抛出异常。 Spring Boot 接口定义要求类型为extends ,这避免了由于视图实体上缺少ID 而不能用作替代方法。 与缺少主键的视图进行交互的正确JPA / SpringBoot

  • 在我的保险库和领事整合我有以下秘密引擎enble 以以下错误结束 待覆盖的Vault-Value其他:待覆盖的Vault-Value已成功连接到数据库 在上下文初始化期间-取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名为“demo application”的bean时出错:调用init方法失败;嵌套异常为java

  • 我正在尝试实现一个简单的REST服务,该服务基于具有Spring启动和Spring数据Rest的JPA存储库。(请参阅此教程)如果将以下代码与 gradle 一起使用,则运行良好: 为了让事情变得更简单,我使用Spring boot CLI(“Spring run”命令)尝试了相同的代码。 不幸的是,这似乎不起作用@RepositoryRestResource似乎无法像@RestControlle