Apache Cayenne:java.io.StreamCorruptedException

Posted

技术标签:

【中文标题】Apache Cayenne:java.io.StreamCorruptedException【英文标题】:Apache Cayenne: java.io.StreamCorruptedException 【发布时间】:2020-10-31 13:15:36 【问题描述】:

我正在尝试进行简单的选择查询,但收到此错误:

java.io.StreamCorruptedException: invalid stream header: 78780A1F 
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:857)

在数据映射中,我有一个 CLOB 类型的 db 属性,我想将其读取为简单的字符串。

<db-entity name="DISC">
        <db-attribute name="DATE" type="TIMESTAMP" isMandatory="true" length="7"/>
        <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
        <db-attribute name="FLAG" type="VARCHAR" isMandatory="true"/>
        <db-attribute name="REQUEST" type="CLOB" isMandatory="false"/>
        <db-key-generator>
            <db-generator-type>ORACLE</db-generator-type>
            <db-generator-name>DISC_SEQ</db-generator-name>
            <db-key-cache-size>1</db-key-cache-size>
        </db-key-generator>
</db-entity>
<obj-entity name="Disc" className="it.pack.dao.Disc" dbEntityName="DISC">
        <obj-attribute name="date" type="java.time.LocalDateTime" db-attribute-path="DATE"/>
        <obj-attribute name="id" type="java.lang.Integer" db-attribute-path="ID"/>
        <obj-attribute name="flag" type="java.lang.String" db-attribute-path="FLAG"/>
        <obj-attribute name="request" type="java.lang.String" db-attribute-path="REQUEST"/>
</obj-entity>

【问题讨论】:

【参考方案1】:

对于'CLOB'类型,数据类型不能是字符串使用:

<obj-attribute name="request" type="java.sql.Clob" db-attribute-path="REQUEST"/>

【讨论】:

好的,但是我需要更改 cayenne 生成的 dao 的 read/writeProperty 对吧?

以上是关于Apache Cayenne:java.io.StreamCorruptedException的主要内容,如果未能解决你的问题,请参考以下文章

Apache-Cayenne 自定义查询结果

使用 Apache Cayenne 批量插入数据库表

Apache Cayenne:java.io.StreamCorruptedException

Apache Cayenne:处理 Postgresql 枚举类型

Apache Cayenne - 批量关系设置

如何让 Apache Cayenne 尊重数据库默认设置?