我正在使用休眠設定一個簡單的 Quarkus 應用程式來測驗 Quarkus 功能。它包含一個簡單的休眠映射
@Entity
Class AnEntity{
public double[] data;
}
它映射到 postgresql 表 anentity(data bytea)。這對我來說很好,并且在 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 反序列化的已知問題。
uj5u.com熱心網友回復:
解決了!經過更多調查,在本機影像生成器序列化組態檔中注冊 double[] 類很簡單。
在 quarkus application.properties 中添加了這一行:
quarkus.native.additional-build-args = -H:SerializationConfigurationResources=serialization-config.json
和 serialization-config.json 很簡單
[
{"name":"double[]"}
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/490056.html
上一篇:使用帶有休眠5.6的tomcat10時顯示錯誤訊息“NoClassDefFoundError:javax/persistence/Entity”
