java – Spring Data JPA ClassCastException:Integer不能强制转换为Long

在我的
Spring Data应用程序中,我遇到了这里描述的类似问题
ClassCastException: Integer cannot be cast to Long, while trying to iterate over entity IDs

这是我的实体:

@Table(name = "users")
public class User extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 5088960286161030648L;

    @Id
    @SequenceGenerator(name = "users_id_seq", sequenceName = "users_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "users_id_seq")
    private Long id;
...
}

和Spring Data Repository方法:

@Query(value = "SELECT u.user_id FROM users u WHERE u.game_id =:gameId", nativeQuery = true)
List<Long> getGameIds(@Param("gameId") Long gameId);

这将返回Long类型的List但是在执行之后返回整数List并且应用程序失败了

java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Long

如何告诉Spring Data或JPA在结果列表中返回Long(非整数)列表?

我不想在运行时强制转换值(Integer to Long).

另外,我的应用程序的主要标准是性能,所以在我的所有实体中将ID从Long切换到Integer是个好主意吗?在JPA中使用Integer而不是Long来实现实体ID是一种好习惯吗?

更新

我使用PostgreSQL

的情况下:

user_id INTEGER我收到了 – java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Long

user_id BIGINT我收到了 – java.lang.ClassCastException:java.math.BigInteger无法强制转换为java.lang.Long

最佳答案 问题是当您使用本机查询时Long类不与您的数据库类型相关 – getLong在那里不起作用.所以你应该做以下其中一件事

>将db和app中的类型更改为BigInteger(如果整数不足以满足您的需求)
>将db和app中的类型更改为Integer(如果它足以满足您的需求)
>删除nqtiveQuery属性并使用clear JPQL.

点赞