我尝试在Java中运行一行代码(使用Hibernate)以保存到数据库。我故意尝试在出错时进行保存,比如将一个长度为10的字符串保存到使用VARCHAR(5)设置的列中。
如果我使用try-catch,然后使用getMessage()存储到String中,那么我只得到“org”。hibernate.exception.GenericJDBCException:无法执行语句“”。但是如果我使用printStackTrace,我会得到更详细的原因消息“value too large for column”。使用getStackTrace()似乎会过度膨胀内存,所以我想避免使用它。
为了从GenericJDBCException获取原因消息,我应该使用什么?谢谢。
1条答案
按热度按时间1rhkuytd1#
java.io.当尝试序列化一个不可序列化的对象时,Spark通常会抛出NotSerializableException错误。在您的示例中,看起来您正在尝试将Spark ArrayType转换为Java List,这不是一个可序列化的操作。
若要解决此问题,可以尝试在将ArrayType转换为List之前将其转换为可序列化的格式。一种方法是将ArrayType转换为可序列化的String对象的Java数组。如果需要,您可以将这个Java数组转换为List。
下面是一个示例代码片段,展示了如何将Spark ArrayType转换为String对象的Java数组:
一旦你有了String对象的Java数组,你就可以使用Arrays将它转换为List。asList()方法:
注意,这种方法假设ArrayType只包含String元素。如果ArrayType包含另一种类型的元素,则需要相应地调整代码。