2014-10-29 98 views
3

当我尝试将Web应用程序部署到Glassfish容器(包括静态外壳程序和服务器)时引发以下异常,我对此产生了真正的负责人。基本上,我有它具有以下属性的实体类:Enum不是枚举映射的有效类型

@Entity 
    public class Anniversary implements Serializable, Comparable<Anniversary> 
    { 
    ... 

     @Enumerated 
     private AnniversaryType type; 

    ....Rest of class 
    } 

哪个是指被声明为枚举类如下:

public enum AnniversaryType 

该方案建立无投诉Netbeans中8.0使用标准Maven项目,但是当它被部署以下异常被抛出:

Caused by: Exception [EclipseLink-7151] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd):   org.eclipse.persistence.exceptions.ValidationException 
Exception Description: The type [class com.mycompany.anniversaries_final.AnniversaryType] for the attribute [type] on the entity class [class com.mycompany.anniversaries_final.Anniversary] is not a  valid type for an enumerated mapping. The attribute must be defined as a Java enum. 
at org.eclipse.persistence.exceptions.ValidationException.invalidTypeForEnumeratedAttribute(ValidationException.java:1125) 
at org.eclipse.persistence.internal.jpa.metadata.converters.EnumeratedMetadata.process(EnumeratedMetadata.java:115) 
at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.MappingAccessor.processEnumerated(MappingAccessor.java:1684) 
at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.BasicAccessor.processEnumerated(BasicAccessor.java:467) 
at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.MappingAccessor.processMappingConverter(MappingAccessor.java:1769) 
at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.MappingAccessor.processMappingValueConverter(MappingAccessor.java:1796) 
at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.BasicAccessor.process(BasicAccessor.java:419) 
at org.eclipse.persistence.internal.jpa.metadata.MetadataDescriptor.processMappingAccessors(MetadataDescriptor.java:1536) 
at org.eclipse.persistence.internal.jpa.metadata.accessors.classes.ClassAccessor.processMappingAccessors(ClassAccessor.java:1648) 
at org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor.processMappingAccessors(EntityAccessor.java:1234) 
at org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor.process(EntityAccessor.java:697) 
at org.eclipse.persistence.internal.jpa.metadata.MetadataProject.processStage2(MetadataProject.java:1793) 
at org.eclipse.persistence.internal.jpa.metadata.MetadataProcessor.processORMMetadata(MetadataProcessor.java:576) 
at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processORMetadata(PersistenceUnitProcessor.java:585) 
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1869) 
... 64 more 

。我很困惑!我已经看过以下两个答案: JPA and enum typejaxws and EclipseLink refuses to use enums from lib如果这个类在一个单独的jar文件中,它们都会提供答案,但在我的情况下它不是(据我所知)。我在应用程序的其他地方遇到了另一个问题,我在那里使用它作为映射键,并且必须根据https://bugs.eclipse.org/bugs/show_bug.cgi?id=364922明确指定表和键值。

我完全难住....任何帮助将不胜感激!

回答

4

固定!这个问题正在由枚举类以下行造成的:

return Arrays.asList(values()).stream().filter(type -> { 
      return type.isCultural(); 
     }).collect(Collectors.toList()); 

我似乎有与使用一般的实体类流问题;当我使用它们时,它们似乎会导致各种显然无关的例外。我已经提交给美国Glassfish的一个bug报告,等待他们的反应......

+0

我也碰到了这个问题。你的帖子让我回答(解决方案要编码......) - 谢谢!在[https://blogs.oracle.com/theaquarium/entry/jpa_and_java_se_8](https://blogs.oracle.com/theaquarium/entry/jpa_and_java_se_8),它规定:**流是不是在当前版本支持JPA(JPA 2.1 - JSR 338),因为它早于Java SE 8,但是,这显然是JPA的下一次更新一个潜在的RFE(见这里本规范RFE)。另外,一些JPA实现已经开始增加对Java 8 Streams(例如Hibernate和EclipseLink)的支持。** – fr13d 2015-08-11 13:16:05