我的应用程序在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问题。我还需要任何其他注释吗?
答案 0 :(得分:5)
如果您使用名为"字段"。
的字段,您将收到此错误答案 1 :(得分:4)
默认使用'类型'确定要使用的实体类的字段,json / xml编组也是如此。你有一个类型字段,但用" Miss'填充它。哪个不能转换为班级。
如果您可以更改发布的JSON,请参阅eclipselink/Moxy : inheritance and attribute name oveloading based on type了解自定义策略或https://www.eclipse.org/eclipselink/documentation/2.4/moxy/type_level003.htm。
这里讨论了JPA中的类型字段http://www.coderanch.com/t/489497/ORM/databases/InheritanceType-JOINED-DiscriminatorColumn 和这里 https://en.wikibooks.org/wiki/Java_Persistence/Inheritance#No_class_discriminator_column_2