在我的
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.