如何解决 java.math.BigInteger 无法转换为 java.lang.Integer?

Posted

技术标签:

【中文标题】如何解决 java.math.BigInteger 无法转换为 java.lang.Integer?【英文标题】:How to work around java.math.BigInteger cannot be cast to java.lang.Integer? 【发布时间】:2022-01-18 20:52:17 【问题描述】:

我的 Spring-boot 有问题,我的请求存储库是这样写的:

package com.ftm.webappli.repository.population;

import java.util.List;

import com.ftm.webappli.model.population.All;
import com.ftm.webappli.model.population.MenWomen;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

@Repository
public interface AllRepository extends JpaRepository<All, Long> 

    @Query(
        value = "SELECT SUM(p15_pop) AS total_population, SUM(p15_poph) AS total_hommes, SUM(p15_popf) AS total_femmes FROM public.iris_pop_2015 WHERE com = :code",
        nativeQuery = true)
    List<MenWomen> sumPopulationHommeFemme(String code);
    

她在 PostgreSQL 上返回 3 BigInt。

在我写的方法中:

package com.ftm.webappli.model.population;

import java.io.Serializable;
import java.math.BigInteger;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;


import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.FieldDefaults;

@Entity
@FieldDefaults(level = AccessLevel.PRIVATE)
@Getter
@NoArgsConstructor
@Setter
@Table(schema = "public", name = "iris_pop_2015")
public class MenWomen implements Serializable 
    
    @Id
    @Column(name = "total_population")
    private BigInteger nbTotal;

    @Column(name = "total_hommes")
    private BigInteger nbMen;

    @Column(name = "total_femmes")
    private BigInteger nbWomen;
 

但我有一个错误:

无法从类型 [java.lang.Object[]] 转换为类型 [com.ftm.webappli.model.population.MenWomen] 的值“5766, 2767, 2999”;嵌套异常是 org.springframework.core.convert.ConverterNotFoundException: 找不到能够从类型转换的转换器

我已尝试更正我的请求:

"SELECT SUM(p15_pop)::integer AS total_population, SUM(p15_poph)::integer AS total_hommes, SUM(p15_popf)::integer AS total_femmes FROM public.iris_pop_2015 WHERE com = :code"

以及整数模型,例如:

@Column(name = "total_hommes")
private Integer nbMen;

但不起作用...该请求在 PostgreSQL 上有效,但在带有 '::integer' 的 Spring 上无效

我也尝试纠正我的 java.lang:

@Repository
public interface AllRepository extends JpaRepository<All, Integer>

或者

@Repository
public interface AllRepository extends JpaRepository<All, Long>

或者

@Repository
public interface AllRepository extends JpaRepository<All, BigInteger>

但是不行……你有想法吗?

【问题讨论】:

【参考方案1】:

请将All 替换为实体名称,即MenWomen,如下所示,

@Repository
public interface AllRepository extends JpaRepository<MenWomen, Integer>

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。 谢谢你!没错……!

以上是关于如何解决 java.math.BigInteger 无法转换为 java.lang.Integer?的主要内容,如果未能解决你的问题,请参考以下文章

大数运算之 Java BigInteger 的基本用法

java.math.BigInteger 不能转换为 java.math.BigDecimal

java.math.BigInteger 不能转换为 java.lang.Integer

[记录]java.math.biginteger cannot be cast to java.lang.long

java Operator ‘/‘ cannot be applied to ‘java.math.BigInteger‘, ‘int‘

java.sql.SQLException: java.lang.ClassCastException:java.math.BigInteger cannot be cast to java.lang