2015-11-11 2 views
0

Привет, я уже представил это как ошибку на веб-сайте eclipselink, но ответа пока нет, и я застрял. Надеюсь, кто-то знает обходное решение или что-то в этом роде. У меня есть единое целое без каких-либо связей с другими таблицами. Сущность сопоставляет существующую таблицу в базе данных оракула.JPA чтение XMLTYPE результаты в NullPointer

@Entity 
@Table(name = "FIVERX_MUSTER16_PRUEFUNG") 
@Customizer(XMLTypeAttributeCustomizer.class) 
public class MYDATATABLE { 

    ... 
    @Lob 
    @Column(name = "XML", columnDefinition = "XMLTYPE") 
    private String xmlDocument; 

    ... 
} 

Я пробовал много вещей, но каждый раз, когда я пытаюсь сделать выбор на этой таблице EclipseLink бросает NullPointerException

ERROR - EjbTransactionUtil.handleSystemException: null 
java.lang.NullPointerException 
    at oracle.jdbc.driver.NamedTypeAccessor.getOracleObject(NamedTypeAccessor.java:302) 
    at oracle.jdbc.driver.NamedTypeAccessor.getObject(NamedTypeAccessor.java:164) 
    at oracle.jdbc.driver.NamedTypeAccessor.getObject(NamedTypeAccessor.java:121) 
    at oracle.jdbc.driver.OracleResultSetImpl.getObject(OracleResultSetImpl.java:1108) 
    at org.eclipse.persistence.platform.database.oracle.Oracle9Platform.getObjectFromResultSet(Oracle9Platform.java:193) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.getObject(DatabaseAccessor.java:1302) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.fetchRow(DatabaseAccessor.java:1077) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processResultSet(DatabaseAccessor.java:744) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:657) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:560) 

Если удалить столбец XMLType все работает, как ожидалось. Если я снова добавить столбец -> NullPointer ...

Вот мой XmlMapper, так что вы можете видеть, что я сделал именно так, как учебники по DirectXmlTypeMapping сказать

import org.eclipse.persistence.config.DescriptorCustomizer; 
import org.eclipse.persistence.descriptors.ClassDescriptor; 
import org.eclipse.persistence.mappings.xdb.DirectToXMLTypeMapping; 


public class XMLTypeAttributeCustomizer implements DescriptorCustomizer { 

@Override 
public void customize (ClassDescriptor descriptor) throws Exception { 
    // Remove JPA default Basic mapping 
    descriptor.removeMappingForAttributeName("xmlDocument"); 
    final DirectToXMLTypeMapping mapping = new DirectToXMLTypeMapping(); 
    mapping.setAttributeName("xmlDocument"); 
    mapping.setFieldName("XML"); 
    mapping.getField().setColumnDefinition("XMLTYPE"); 
    descriptor.addMapping(mapping); 
} 

}

есть ли обходной путь ? Мне нужно работать с этой таблицей, и это не единственный, который содержит столбец XMLTYPE ... Я абсолютно вне идей здесь ...

+0

В этой ситуации существуют различные обсуждения этой проблемы. Одним из предлагаемых решений, похоже, является возврат к более старой версии драйвера JDBC Oracle. https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#es_th=1&q=at+oracle.jdbc.driver.NamedTypeAccessor.getOracleObject(NamedTypeAccessor.java% 3A302) –

+0

Вы упоминаете, что когда вы удаляете столбец xmltype, все работает, ссылаетесь ли вы на аннотации lob и столбцов, или на все, например, на customizer? Как вы указали его так, чтобы вызывающий пользователь вызвал? – Chris

+0

Я имел в виду, если я удалю поле. Переменная сама со всей аннотацией. Заказчик также определенно называется. sysouts доказали это. И я не пробовал оставлять настройки в классе, когда удалял поле xml – Goldfish

ответ

0

проблема была ошибкой в ​​драйвере jacb. Проблема была исправлена ​​в версии 11.2.0.4

Смежные вопросы