Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;无效的流标头“;异常-带JPA和MySQL的Lob_Java_Mysql_Jpa_Lob - Fatal编程技术网

Java &引用;无效的流标头“;异常-带JPA和MySQL的Lob

Java &引用;无效的流标头“;异常-带JPA和MySQL的Lob,java,mysql,jpa,lob,Java,Mysql,Jpa,Lob,我有一个这样定义的字段 @MappedSupperclass public abstract class BaseItem { ... @Lob @Basic(fetch=FetchType.EAGER) private String description; ... } @Entity public class Item extends BaseItem { } 我使用的是MySQL 5,description字段类型是TEXT 尝试读取Item类型的对象

我有一个这样定义的字段

@MappedSupperclass
public abstract class BaseItem {

    ...
    @Lob @Basic(fetch=FetchType.EAGER)
    private String description;
    ...
}

@Entity
public class Item extends BaseItem {
}
我使用的是MySQL 5,
description
字段类型是
TEXT

尝试读取Item类型的对象时,出现以下错误:

java.io.StreamCorruptedException: invalid stream header: 6576656E
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org.datanucleus.store.rdbms.datatype.BlobImpl.getObject(BlobImpl.java:121)
    at org.datanucleus.store.rdbms.mapping.AbstractLargeBinaryRDBMSMapping.getObjectForBytes(AbstractLargeBinaryRDBMSMapping.java:362)
    at org.datanucleus.store.rdbms.mapping.AbstractLargeBinaryRDBMSMapping.getObject(AbstractLargeBinaryRDBMSMapping.java:395)
    at org.datanucleus.store.mapped.mapping.AbstractContainerMapping.getObject(AbstractContainerMapping.java:228)
    at org.datanucleus.store.rdbms.fieldmanager.ResultSetGetter.fetchObjectField(ResultSetGetter.java:176)
    at org.datanucleus.state.AbstractStateManager.replacingObjectField(AbstractStateManager.java:2353)
    ...
java.io.StreamCorruptedException:无效的流头:6576656E
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
位于java.io.ObjectInputStream。(ObjectInputStream.java:279)
位于org.datanucleus.store.rdbms.datatype.BlobImpl.getObject(BlobImpl.java:121)
位于org.datanucleus.store.rdbms.mapping.AbstractLargeBinaryRDBMSMapping.getObjectForBytes(AbstractLargeBinaryRDBMSMapping.java:362)
位于org.datanucleus.store.rdbms.mapping.AbstractLargeBinaryRDBMSMapping.getObject(AbstractLargeBinaryRDBMSMapping.java:395)
位于org.datanucleus.store.mapped.mapping.AbstractContainerMapping.getObject(AbstractContainerMapping.java:228)
位于org.datanucleus.store.rdbms.fieldmanager.ResultSetGetter.fetchObjectField(ResultSetGetter.java:176)
位于org.datanucleus.state.AbstractStateManager.ReplacingGobjectField(AbstractStateManager.java:2353)
...
你知道可能的原因是什么吗


我正在使用JDK6和DataNucleus 3.1.1。

删除@Lob注释修复了该问题。

这似乎是一个特定于提供商的错误。DataNucleus使用术语feature,但它们对@Lob注释字段的处理似乎不符合JPA。如果你作为一个JPA提供商坚持使用他们,那么你将不得不删除该注释。@Perception,如果你有一些问题,“正确”的报告方式是在公共JIRA中提出问题,并用testcase演示它(而不是第三方站点“投诉”)。JPA合规性由一个TCK(尽可能完整)进行管理,并且通过了。数据的检索显然取决于数据在该列中的存储方式(OP在这里没有定义),因此数据是否序列化对于任何理解及其处理(当然还有正在使用的软件版本,这里也没有说明)。@DataNucleus-我本人不知道这个问题(我们使用的是Hibernate JPA provider). 然而,@AdrianBer发布的代码似乎表明了处理
@Lob@Basic
字段的方式存在DataNucleus问题。也许让他提交一份bug报告?@DataNucleus我修改了我的帖子并加入了使用的版本。列类型为文本,数据仅包含纯文本。@Adrian Ber,我在当前DataNucleus代码库上尝试了您的案例(这里唯一可用的东西),它将“description”字段映射到ClobRDBMSMapping)并因此读取纯文本值,没有问题。在日志中查找在您的案例中使用的内容(我猜是BlobRDBMSMapping,但日志会告诉您)。也许这是以前版本中的一个bug,但唯一可以判断的方法是尝试最新版本。您应该查找的日志条目类似于字段…->列。。。使用类型{…}的映射(org.datanucleus.store.rdbms.mapping.datastore.ClobRDBMSMapping)