2014-10-29 101 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