在我的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 cannot be cast to java.lang.Long
如何告诉Spring Data或JPA在结果列表中返回Long
(不是Integer
)的列表?
我不想在运行时强制转换值(Integer to 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
答案 0 :(得分:2)
问题是当您使用本机查询Long
时,类与您的数据库类型不相关 - getLong在那里不起作用。所以你应该做以下其中一个