2013-07-12 47 views
1

我有休眠一個非常巨大的問題。休眠Inheritance.TABLE_PER_CLASS戰略

我的產業戰略,完美的作品下的EclipseLink作爲JPA提供者,無論是在GlassFish和JBoss應用服務器,但是當我切換到休眠狀態,一切都heywire。

我已經在這裏讀的幾個職位,但沒有解決我的問題。

以下是堆棧跟蹤。

Failed to start service 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_21] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_21] 
    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_21] 
Caused by: java.lang.ClassCastException: org.hibernate.mapping.UnionSubclass cannot be cast to org.hibernate.mapping.RootClass 
    at org.hibernate.cfg.annotations.PropertyBinder.bind(PropertyBinder.java:210) 
    at org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:201) 
    at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2011) 
    at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:765) 
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:684) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3406) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3360) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1334) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724) 
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73) 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162) 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 
    ... 3 more 

我已經確定沒有子類定義了另一個@Id列(在任何情況下,NetBeans將始終標誌我這個錯誤)

這是一組遺傳的,我有:

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
@PartialSecurity 
public abstract class DataVerification extends SecureEntity implements Serializable { 

    private static final long serialVersionUID = IdGenerator.serialVersionUID(DataVerification.class); 
    @Id 
    private Long verificationId = IdGenerator.generateId(); 
    @Column(length = 50, nullable = false) 
    private String verificationCode; 
    private String verifiedId; 
    private boolean verified; 
    @Temporal(javax.persistence.TemporalType.TIMESTAMP) 
    private Calendar verificationDate; 
    private DataVerificationType dataVerificationType; 
    private VerificationMethod verificationMethod; 
    @OneToOne 
    private Account verifiedBy; 
    @OneToOne 
    private Account approvedBy; 


/** 
* 
* @author marembo 
*/ 
@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class OnlineDataVerification extends DataVerification implements Serializable { 
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @Ignore 
    private List<UploadFile> verificationFiles; 


    /** 
    * 
    * @author marembo 
    */ 
    @Entity 
    public class IncomeDataVerification extends OnlineDataVerification implements Serializable { 

     private static final long serialVersionUID = IdGenerator.serialVersionUID(IncomeDataVerification.class); 
     private IncomeSource incomeSource; 
     private String occupation; 


/** 
* 
* @author marembo 
*/ 
@Entity 
public class AgentDataVerification extends OnlineDataVerification implements Serializable { 

    @Column(length = 2048, nullable = false) 
    private String comment; 
    private String verificationTransaction = IdGenerator.generateStringId(); 

謝謝

+0

你能不能把基類和子類? –

+0

我有幾個繼承,就像我跟一個非常龐大的工程工作,但我張貼他們幾個 – maress

+0

的這個異常通常是由重複@Id引起的,但你說你確信有沒有任何。 –

回答

0

您的堆棧跟蹤引發懷疑休眠版本不一致的問題。如果你將應用程序部署到JBoss,JBoss已經有了自己的休眠。如果您的戰爭還帶有不同版本的Hibernate,那麼在類路徑上加載的實際類可能會不一致,從而導致各種問題。

通常最好的做法是,如果你要部署到容器中已經提供了休眠不捆綁它你的戰爭中(如:爲提供有關Maven POM標誌依賴)

+0

我不甚至有冬眠的依賴,因爲我不會在編譯的時候需要它 – maress