如何获得'org的原因,hibernate.exception.GenericJDBCException:无法通过Try Catch和GetMessage执行语句'?

s71maibg  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(141)

我尝试在Java中运行一行代码(使用Hibernate)以保存到数据库。我故意尝试在出错时进行保存,比如将一个长度为10的字符串保存到使用VARCHAR(5)设置的列中。
如果我使用try-catch,然后使用getMessage()存储到String中,那么我只得到“org”。hibernate.exception.GenericJDBCException:无法执行语句“”。但是如果我使用printStackTrace,我会得到更详细的原因消息“value too large for column”。使用getStackTrace()似乎会过度膨胀内存,所以我想避免使用它。
为了从GenericJDBCException获取原因消息,我应该使用什么?谢谢。

1rhkuytd

1rhkuytd1#

java.io.当尝试序列化一个不可序列化的对象时,Spark通常会抛出NotSerializableException错误。在您的示例中,看起来您正在尝试将Spark ArrayType转换为Java List,这不是一个可序列化的操作。
若要解决此问题,可以尝试在将ArrayType转换为List之前将其转换为可序列化的格式。一种方法是将ArrayType转换为可序列化的String对象的Java数组。如果需要,您可以将这个Java数组转换为List。
下面是一个示例代码片段,展示了如何将Spark ArrayType转换为String对象的Java数组:

import org.apache.spark.sql.types.ArrayType;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;

ArrayType arrayType = DataTypes.createArrayType(DataTypes.StringType);
String[] stringArray = (String[]) arrayType.sqlType().defaultSize();

一旦你有了String对象的Java数组,你就可以使用Arrays将它转换为List。asList()方法:

import java.util.Arrays;
import java.util.List;

List<String> stringList = Arrays.asList(stringArray);

注意,这种方法假设ArrayType只包含String元素。如果ArrayType包含另一种类型的元素,则需要相应地调整代码。

相关问题