День добрый.
В БД есть таблица, допустим, doc. Таблица содержит столбец dtype(дискриминатор по умолчанию)
Создано несколько entities
1 родительская с наследованием в одну таблицу(упрощенный вариант)
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType=DiscriminatorType.INTEGER)
public class Doc
...
и несколько дочерних. В зависимости от типа дочернего документа, устанавливается свойство родительского класса
@Entity
@DiscriminatorValue("4")
public class DocReceipt extends Doc {
public DocReceipt() {
setDocType(DocType.DF_RECEIPT);
}
Логи glassfish(приложение по выгрузке данных через soap) после запроса данных:
Exception Description: Missing class indicator field from database row [ArrayRecord(
doc.ID => 71
doc.DTYPE => null
doc.docdate => 2017-11-17
doc.docstate => DS_NEW
doc.doctype => DF_RECEIPT
..
].
Descriptor: RelationalDescriptor(ru.mobilcard.office.entities.eod.EodDoc --> [DatabaseTable(docflow.eod)])
at org.eclipse.persistence.exceptions.DescriptorException.missingClassIndicatorField(DescriptorException.java:948)
at org.eclipse.persistence.descriptors.InheritancePolicy.classFromRow(InheritancePolicy.java:349)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:723)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:689)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:805)
at org.eclipse.persistence.queries.ReadAllQuery.registerResultInUnitOfWork(ReadAllQuery.java:962)
at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:573)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1175)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:904)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1134)
at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:460)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1222)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1857)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1839)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:473)
Есть предположение что проблема в том, что EclipseLink не может определить какую дочернюю таблицу следует использовать, но на это же есть дискриминатор. Только недавно начал изучать Java, нет ещё опыта. Документацию по JPA в java ee просмотрел, все вроде правильно, решения в интернете не нашел. Сталкивался ли кто с подобной проблемой? Как решали?