我正在使用Hibernate设置一个简单的Quarkus应用程序,以测试Quarkus功能。它包含一个简单的Hibernate映射
@Entity
Class AnEntity{
public double[] data;
}
它映射到postgresql表anentity(数据字节)。这对我来说很好,在JVM上运行时效果很好:这方面没有问题。我可以使用NativeQuery轻松读取表的内容。
Query query = em.createNativeQuery("select * from anentity",AnEntity.class);
List<AnEntity> resultList = query.getResultList();
for (AnEntity anEntity: resultList) {
System.out.println(anEntity.data);
}
此处的行为是在从数据库读取/写入数据字段时,使用“标准”java 序列化对数据数组的内容进行序列化/反序列化。
现在,在本机模式下编译时,我遇到了一个与序列化相关的异常,如下所示:
ERROR [io.qua.run.Application] (main) Failed to start application (with profile prod): java.io.StreamCorruptedException: invalid type code: 40
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1712)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:2103)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1669)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:493)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:451)
at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:225)
at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:287)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:138)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:113)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:29)
at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:60)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243)
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:329)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:3214)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1887)
at org.hibernate.loader.Loader.hydrateEntityState(Loader.java:1811)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1784)
at org.hibernate.loader.Loader.getRow(Loader.java:1624)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:748)
at org.hibernate.loader.Loader.getRowsFromResultSet(Loader.java:1047)
我尝试在@RegisterForReflection注释中注册 double[].class,将 double[] 更改为 Double[],但没有帮助。
我不确定这里出了什么问题。看起来Java默认的序列化/反序列化在本机模式下无法正常工作,我想知道如何解决这个问题。
感谢您的任何提示/指针。我觉得这是一个简单的问题,在某个地方缺少声明或配置参数,至少我希望如此:)我将在本机模式下仔细检查Java反序列化的已知问题。
解决!经过更多调查,在本机映像生成器序列化配置文件中注册 double[] 类很简单。
在quarkus应用程序中添加了这一行。属性:
quarkus.native.additional-build-args = -H:SerializationConfigurationResources=serialization-config.json
serialization-config.json是简单的
[
{"name":"double[]"}
]
我有一个有多个模块的Quarkus项目。 在公共模块中,我添加了以下依赖项(遵循本指南 https://quarkus.io/guides/rest-client)。 子模块将公共模块作为依赖项。 以及我在子模块中使用的代码片段。 并从另一个ApplicationScoped类调用它: 当在纯模式下运行应用程序时,它会抛出。 我偶然发现了这个(https://quarkus.io/guides/l
在本机构建时,我对可用区域设置有一个意想不到的行为。在纯模式下,我只有一个区域设置可用。 我的应用程序很简单: 签出后,如果我在开发模式下启动应用程序: 您可以调用endpoint:http://localhost:8080/api/locales 此endpoint返回许多区域设置: 如果在纯模式下执行相同操作: 我只获得一个区域设置: 如何获取所有可用的区域设置? 而且,由于这种行为,我还有另
我的Quarkus申请一直面临一个问题。该应用程序在本地开发模式下运行时可以正常工作,但是当它作为本地映像构建时,我面临一些奇怪的问题。 遇到的错误: 访问私有intjava.util.ArrayList.size的偏移量时,不首先将字段注册为不安全访问。 org.hibernate.type.serializationexception不能反序列化 java.io.InvalidClassExc
在application.dispatcher.catchException(配置文件, 或者可通过Yaf_Dispatcher::catchException(true))开启的情况下, 当Yaf遇到未捕获异常的时候, 就会把运行权限, 交给当前模块的Error Controller的Error Action动作, 而异常或作为请求的一个参数, 传递给Error Action. 在Error A
我在集群模式和本地模式中尝试火花上的简单字数示例它在本地模式中工作良好,但在集群模式中抛出类铸造异常这里是代码片段... 针对scala 2.11构建环境Spark 1.6。7. 例外情况: 火花壳输出:
问题内容: 这是一种常见的模式,我看到与异常关联的错误代码存储为静态最终整数。当创建要抛出的异常时,将使用这些代码之一以及错误消息来构造该异常。这导致该方法要抓住它,必须先查看代码,然后决定采取的措施。 替代方法似乎是-为每个异常错误情况声明一个类(尽管相关的异常会从通用基类中删除) 有中间立场吗?推荐的方法是什么? 问题答案: 这是一个很好的问题。我相信绝对有中间立场。 我认为错误代码对于显示质
本文向大家介绍C#异常反模式,包括了C#异常反模式的使用技巧和注意事项,需要的朋友参考一下 示例 吞咽异常 应该始终以以下方式重新引发异常: 重新抛出如下所示的异常将混淆原始异常,并丢失原始堆栈跟踪。一个人绝对不要这样做!捕获和重新抛出之前的堆栈跟踪将丢失。 棒球异常处理 人们不应该使用异常代替常规的流控制结构,例如if-then语句和while循环。这种反模式有时称为“棒球异常处理”。 这是反模
我刚开始学习Hadoop,我从一本书中摘录了一个例子。所以我创建了一个本地运行的MapReducer,它可以从NCDC免费数据文件中提取温度。这是一个数据样本: 每一个文件(我下载了大约100个文件)都由许多这样的行组成。 我的映射程序执行简单的解析操作,从这些文件中提取温度。整个过程将返回最高温度。 映射器和相关测试: 减速器及相关测试: 最后是驾驶员等级测试: 我使用命令行运行整个过程: Ma