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)