微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法从类型[java.util.LinkedHashSet <?>]转换为类型[java.util.Set <java.lang.Long>]

如何解决无法从类型[java.util.LinkedHashSet <?>]转换为类型[java.util.Set <java.lang.Long>]

我当前正在将项目从Java 8 with Springboot 1.5.9.RELEASE更新为Java 11 with Springboot 2.2.7.RELEASE。我能够使它运行,尽管在进行测试时,对其的一个查询不再起作用。它抛出了Failed to convert from type [java.util.LinkedHashSet<?>] to type [java.util.Set<java.lang.Long>]... nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [project.Param] to type [java.lang.Long]。该项目的构建也非常完美,并且在以下所述的类中没有任何过时项目的警告。

这就是我在服务中的称呼方式:

Set<Long> ids = ParamRepository.findIdByCampaign(campaign);

Param.java

@Entity
@Table(name = "ParaM")
public class Param implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID_ParaM",updatable = false,nullable = false)
    private Long id;

    @ManyToOne(cascade = CascadeType.MERGE,fetch = FetchType.LAZY)
    @JoinColumn(name = "ID_CAMPAIGN",nullable = false)
    private Campaign campaign;

ParamRepository.java

@Repository 
public interface ParamRepository extends JpaRepository<Param,Long> {
        Set<Long> findIdByCampaign(Campaign campaign);
    }

我尝试将 JpaRepository 更改为 JpaRepository ,因为除了findByCampaign查询之外,它还涉及其他本机查询。尽管自从以前就可以使用以来这没有意义,所以我不太确定接下来要检查什么。

关于为什么会发生错误或我应该进一步检查的其他想法?预先谢谢你!

解决方法

findIdByCampaign将返回实体集合的意思是Param而不是Long,您应该仅选择id来获得Set of Long。

要仅选择id,可以使用带有@Query批注的JPQL。

@Query("Select p.id from Param p where p.campaign = :campaign")
Set<Long> findIdByCampaign(@Param("campaign") Campaign campaign);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。