Java,将可序列化对象转换(强制类型转换)为其他对象

6

我正在使用Session.save()方法(在Hibernate中)来持久化我的实体对象,该方法返回一个java.io.Serializable类型的对象。

返回值是实体的生成主键。

生成的主键是long(或bigint)类型。

问题是:如何将返回值转换或强制转换为long类型?

Serializable result = session.save(myEntityObject);

//This line of code fails. 
long r = (long)result;

2
你尝试过 long r = ((Long) result).getLong() 吗? - Xavi López
6个回答

8
尝试将结果(因为它不是原始类型)转换为Long而不是long
Long r = (Long)result;
long longValue = r.longValue();

3

请尝试

long r = Long.valueOf(String.valueOf(result)).longValue();

1
你尝试过使用调试器并在该行处中断,以查看“result”到底是什么吗?
它可能是BigDecimal或Long或其他类型。
或者,你可以直接调用对象的主键getter方法 - 我希望此时它已经被设置了。
希望对你有所帮助, Chris

0

你应该指定你遇到的错误类型!无论如何,这个应该可以解决问题。

long r = Long.valueOf(result) 

0

尝试使用long r = ((Long) result).getLong()代替。


0

上面的答案对我没用。

我误解了statelessSession.get(...)函数的作用。 如果主键是非复合键,则第二个参数应该是primary-key的原始值。

如果实体具有复合键,则应将实体本身(带有填充的pk)作为第二个参数传递。

我感到困惑,因为我认为我需要始终将实体作为第二个参数传递给statelessSession.get(因为它适用于多键实体)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接