如何解决无法从类型[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 举报,一经查实,本站将立刻删除。