在我的Spring Data应用程序中,我遇到了类似于此处描述的问题:ClassCastException:Integer不能强制转换为Long,尝试迭代实体ID时
这是我的实体:
@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,但实际执行后返回了一个Integer类型的List,并且应用程序因此失败并出现以下错误:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
如何告诉Spring Data或JPA在结果列表中返回Long
(而不是Integer
)的List?
我不想在运行时进行值转换(从Integer到Long)。
此外,我的应用程序的主要标准是性能,那么将我的实体中所有ID从Long
更改为Integer
是个好主意吗?在JPA中是否使用Integer
代替Long
作为实体ID是一种良好的做法吗?
更新
我使用的是PostgreSQL数据库
对于:user_id INTEGER
,我收到的错误是:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
对于:user_id BIGINT
,我收到的错误是:java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long