【发布时间】:2020-05-14 20:23:15
【问题描述】:
我正在使用以下主键声明对 MySQL 表运行一个简单的插入查询:
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY
由于某种原因,他们返回的键是 BigInteger。我需要进行哪些更改才能将 Long 值作为键返回?
编辑
我基本上是在制作一个 mini-ORM,而 Long 类型在编译时是未知的,因为它是一个类参数 (AbstractDao<T, I>)。本质上,我需要能够将 Number 转换为 Long 而无需使用其中包含 long 的任何内容(Long.valueOf()、.longValue() 等)。
我确实有一个包含 Long.class 的 Class 实例:
protected Class<?> idClass = ((Class<?>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]);
该实例能否以某种方式用于执行转换?您不能只将 BigInteger 转换为 Long,也不能将 BigInteger 的 String 表示形式转换为 Long。如果有办法从我的类对象访问 valueOf() 这可能有效?
【问题讨论】:
-
我将密钥更改为 INT,但该方法仍然返回 BigInteger。由于大量的反射和泛型使用,我不能只做 Long.valueOf()。那个方法的返回类型是 Number,为什么要强制我使用 BigInteger?
-
问题是,Long 类型是一个类参数 (T),在运行时不知道,所以我不能使用 longValue,因为有人可以根据需要用 Integer 参数化这个类。基本上我只需要一个 Class> 的实例将 Number 转换为 Long ,在这种情况下,它包含一个 Long.class 值。
-
如果这是您的要求,那么请编辑问题并说出来,这样阅读问题的人就会知道您需要什么。显示您所指的方法,以澄清您在说什么。
标签: java mysql key spring-jdbc