У меня проблема с извлечением данных пользовательского типа Oracle из базы данных.
Один из столбцов в таблице имеет пользовательский тип Oracle (на самом деле это VARRAY):
Вот инструкция createдля этого типа:
create or replace TYPE CAlarmMessList AS VARRAY(15) OF CAlarmMess;
Где CAlarmMess
является следующим:
create or replace TYPE CAlarmMess AS OBJECT (EreignisTypId NUMBER(9), EreignisKlasseId NUMBER(9), AlarmZeit DATE, ParamWert1 VARCHAR2(65 CHAR), ParamWert2 VARCHAR2(65 CHAR), ParamWert3 VARCHAR2(65 CHAR) [....]
И нужное мне поле имеет имя ALARME
и тип CALARMMESSLIST
.
Я создал Entity для таблицы (WSENSORSTATE
), используя инструменты Oracle для Eclipse.Это поле было сгенерировано как Object
поле.
Я вручную создал тип Java CAlarmMess
с полями:
private BigDecimal ereignisTypId;
private BigDecimal ereignisKlasseId;
private Date alarmZeit;
private String paramWert1;
private String paramWert2;
private String paramWert3;
И изменил тип поля в моем объекте «Список CAlarmMess».
Когда я добавил настройщик для своей сущности:
@Customizer(com.companyname.entities.WsensorstateCustomizer.class)
Где используется метод настройки следующим образом:
public void customize (дескриптор ClassDescriptor) выдает Exception {
ObjectArrayMapping arrayMapping = new ObjectArrayMapping ();
arrayMapping.setReferenceClass (Wsensorstate.class);
arrayMapping.setAttributeName ("alarme");
arrayMapping.setFieldName ("CAlarmMess");
arrayMapping.setStructureName ("CAl");
descriptor.addMapping (arrayMapping);
}
Теперь возникает следующая ошибка:
Исключение [EclipseLink-197] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DescriptorException Исключение Описание: сопоставление [alarme] не является подходящим типом для этого дескриптора Mapping: org.eclipse.persistence.mappings.structures.ObjectArrayMapping [alarme] дескриптор: RelationalDes(com.companyname.entities.Wsensorstate -> [DatabaseTable (WSENSORSTATE)])
Я пытался добавить @StructConverter для CAlarmMess, но он также не работал.
Все предложения будутбыть оцененным, я уже потратил слишком много времени, работая над этим.:)