Java EclipseLink:缺少类型的指示器字段值的类

Java EclipseLink:缺少类型的指示器字段值的类,java,rest,jpa,glassfish,eclipselink,Java,Rest,Jpa,Glassfish,Eclipselink,我的应用程序在Payara上运行并提供REST API,但当我尝试使用POST请求创建对象时,会出现以下异常: Exception [EclipseLink-43] (Eclipse Persistence Services - 2.6.0.payara-p1): org.eclipse.persistence.exceptions.DescriptorException Exception Description: Missing class for indicator field value

我的应用程序在Payara上运行并提供REST API,但当我尝试使用POST请求创建对象时,会出现以下异常:

Exception [EclipseLink-43] (Eclipse Persistence Services - 2.6.0.payara-p1): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Missing class for indicator field value [Miss] of type [class java.lang.String].
Descriptor: XMLDescriptor(at.htl.handballinheritance.entity.Throw --> [DatabaseTable(event), DatabaseTable(dataObject)])
  at org.eclipse.persistence.exceptions.DescriptorException.missingClassForIndicatorFieldValue(DescriptorException.java:940)
  at org.eclipse.persistence.internal.oxm.QNameInheritancePolicy.classFromRow(QNameInheritancePolicy.java:278)
  ...

相反,当我在使用Hibernate的Wildfly上执行程序时,一切都很好,没有错误发生

实体:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@XmlRootElement
public abstract class Event extends DataObject implements Serializable {
    ... 
}

@Entity
public class Throw extends Event implements Serializable {

    @Enumerated(EnumType.STRING)
    @NotNull
    private ThrowingType type;

    ...
}

public enum ThrowingType {
    Goal, Miss
}
REST API:

@POST
public Response create(Throw entity) {
    em.persist(entity);
    return Response.created(URI.create("...")).build();
}

我认为Eclipselink在解组我的json时有问题。是否需要任何其他注释?

联接继承在默认情况下将使用“类型”字段来确定要使用的实体类,json/xml封送也是如此。您有一个类型字段,但填充了无法转换为类的“Miss”

有关自定义策略或是否可以更改发布的JSON,请参阅

这里讨论了JPA中的类型字段 这里呢

如果使用名为“type”的字段,则会出现此错误。

联合继承在默认情况下将使用“type”字段来确定要使用的实体类,json/xml封送也是如此。您有一个type字段,但填充了无法转换为类的“Miss”。请参阅以了解自定义策略,或者您是否可以更改正在发布的JSON。我将属性重命名为throwingType,从而解决了我的问题。请将您的评论作为答案发布,以便我可以将其标记为答案。是否有任何解释说明为什么EclipseLink失败而Hibernate没有?Hibernate在数据库中使用联接继承时不必考虑类型字段,因为它可以使用查询联接机制。EclipseLink确实使用了该类型,因为它认为过滤掉不需要的连接更有效,并且还必须在不可能进行连接的情况下处理JSON/XML。这实际上是我的问题。。在那里保存了我。那么,如果您想命名您的联合继承(鉴别器)字段
类型
,而不是
类型
gc\u类型
抛出类型
等,这里的解决方案是什么。?我认为这是一个非常糟糕的软件决策。我不理解你的问题,什么软件决策是糟糕的EclipseLink在需要时使用“TYPE”作为继承的默认字段名(单表继承和联接表继承需要在EclipseLink中使用它)。如果希望它使用其他内容,请指定DiscriminatorColumn注释。这里的问题是,他们无意中将“TYPE”字段用于其他内容,导致值发生冲突。事实上,发生这种情况时,我在项目中更改了一些内容,但现在我无法再复制它了。有一段时间,
类型
字段导致了一些异常,我认为这是某种内部命名决定。恐怕,我不能回到发生这件事的时候,我上面的咆哮可能不再适用了。(我不能在此更改我的评论)