我正在使用Session.save()
方法(在Hibernate中)来保存我的实体对象,这些对象返回类型为java.io.Serializable
的对象。
返回的值是实体生成的主键。
生成的主键的类型为long
(或bigint)。
问题是:如何将返回值转换或转换为long
?
Serializable result = session.save(myEntityObject);
//This line of code fails.
long r = (long)result;
答案 0 :(得分:7)
尝试将结果(因为它不是原始数据)转换为Long
而不是long
。
Long r = (Long)result;
long longValue = r.longValue();
答案 1 :(得分:1)
尝试
long r = Long.valueOf(String.valueOf(result)).longValue();
答案 2 :(得分:1)
您是否尝试过使用调试器并在该行中断开以查看“结果”究竟是什么?
可能是BigDecimal或Long或......
或者,你不能只是在对象上调用主键getter方法 - 我希望它会被那个点设置。
HTH, 克里斯
答案 3 :(得分:0)
请尝试使用long r = ((Long) result).getLong()
。
答案 4 :(得分:0)
你应该指定你得到的错误类型!无论如何这应该有用..
long r = Long.valueOf(result)
答案 5 :(得分:0)
以上答案对我不起作用。
我误解了statelessSession.get(...)
的功能。
如果第二个参数是primary-key
键,则它应该是non-composte
的原始值。
如果实体具有复合键,则应将实体本身(带有填充的pk)作为第二个参数传递。
我很困惑,因为我认为我必须始终将一个实体作为第二个参数传递给statelessSession.get
(因为它适用于多键实体)。