无法将oracle.xdb.XMLType转换为java.lang.String错误

无法将oracle.xdb.XMLType转换为java.lang.String错误,java,jakarta-ee,jpa,eclipselink,Java,Jakarta Ee,Jpa,Eclipselink,我使用JPA从OracleXMLType列检索数据。我创建了一个自定义程序: @Override public void customize(final ClassDescriptor descriptor) throws Exception { descriptor.removeMappingForAttributeName("content"); DirectToXMLTypeMapping mapping = new DirectToXMLTypeMapping();

我使用JPA从OracleXMLType列检索数据。我创建了一个自定义程序:

@Override
public void customize(final ClassDescriptor descriptor) throws Exception {
    descriptor.removeMappingForAttributeName("content");
    DirectToXMLTypeMapping mapping = new DirectToXMLTypeMapping();
    mapping.setAttributeName("content"); //name of the atribute on the Entity Bean
    mapping.setFieldName("CONTENT"); //name of the data base column
    mapping.getField().setColumnDefinition("XMLTYPE");
    descriptor.addMapping(mapping);
}
我的实体类中的列是:

@Basic(optional = false)
@NotNull
@Lob
//@Column(name = "CONTENT", columnDefinition="XMLTYPE")    
private String content;
但是,当我运行我的程序时,我得到错误“
java.lang.ClassCastException:oracle.xdb.XMLType不能转换为java.lang.String
位于entities.Sqdocument.\u persistence\u集合(Sqdocument.java)
位于org.eclipse.persistence.internal.descriptors.PersistenceObjectAttributeAccessor.setAttributeValueInObject(PersistenceObjectAttributeAccessor.java:46)
位于org.eclipse.persistence.mappings.DatabaseMapping.setAttributeValueInObject(DatabaseMapping.java:1532)
位于org.eclipse.persistence.mappings.DatabaseMapping.readfromRowInObject(DatabaseMapping.java:1423)
位于org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject(ObjectBuilder.java:448)
位于org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:803)
位于org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:607)
位于org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:564)
位于org.eclipse.persistence.querys.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:777)
位于org.eclipse.persistence.querys.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:462)
位于org.eclipse.persistence.querys.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1150)
位于org.eclipse.persistence.querys.DatabaseQuery.execute(DatabaseQuery.java:852)
位于org.eclipse.persistence.querys.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1109)
位于org.eclipse.persistence.querys.ReadObjectQuery.execute(ReadObjectQuery.java:421)
位于org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:2946)
位于org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1602)
位于org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1584)
位于org.eclipse.persistence.internal.indirection.NoIndirectionPolicy.valueFromQuery(NoIndirectionPolicy.java:323)
位于org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRowInternal(ForeignReferenceMapping.java:2135)
位于org.eclipse.persistence.mappings.OneToOneMapping.valueFromRowInternal(OneToOneMapping.java:1716)
位于org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRow(ForeignReferenceMapping.java:2024)
位于org.eclipse.persistence.mappings.ForeignReferenceMapping.ReadFromRowInObject(ForeignReferenceMapping.java:1369)
位于org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject(ObjectBuilder.java:448)
位于org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:803)
在org.eclipse.persistence.internal.descriptors.ObjectBuilder.BuildWorkingCopyCloneNormal上(ObjectBuilder.java:719)
位于org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork(ObjectBuilder.java:672)
位于org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:605)
位于org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:564)
位于org.eclipse.persistence.querys.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:777)
位于org.eclipse.persistence.querys.ReadAllQuery.registerResultInUnitOfWork(ReadAllQuery.java:783)
位于org.eclipse.persistence.querys.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:434)
位于org.eclipse.persistence.querys.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1150)
位于org.eclipse.persistence.querys.DatabaseQuery.execute(DatabaseQuery.java:852)
位于org.eclipse.persistence.querys.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1109)
位于org.eclipse.persistence.querys.ReadAllQuery.execute(ReadAllQuery.java:393)

有什么问题吗?谢谢。

Eclipselink正在成功检索XML类型。问题是XMLType不是String的实例,因此无法自动转换

您需要编写一个转换器来在XMLType和String之间进行转换。如果希望以任何方式更改数据,还需要编写转换器的另一端,即从字符串到XMLType


请查看有关编写转换器的帮助。

谢谢您的回答。我看过这些转换器,但不确定应该使用哪一个?我建议使用@Converter元素。查看API。