2017-05-14 30 views
1

我有以下類的設置。如你所見,實體之間的連接如下:Passager(1-n)Buchung(n-1)Faehrfahrt(n-1)Faehre(n-1)Strecke。我試圖在我的休眠設置中實現上面的邏輯。但是,如果我開始這個(開始意味着:使用gradlew構建命令,因爲我的項目是Spring,Gradle,Java))我得到以下錯誤消息(請參閱本文的結尾),基本上說,我瞭解1-To - 許多關係錯了,例如我嘗試將非收藏映射爲集合。但是,我沒有看到我在做這個錯誤,因爲我的理解是,所有的關係都被正確註釋了。那爲什麼它不起作用?春季休眠註釋加入幾個表與不同的關係

感謝您的幫助! :)

@Entity 
public class Buchung { 

@Id 
@GeneratedValue 
private UUID id;  

@JsonIgnore 
@ManyToOne() 
private Faehrfahrt faehrfahrt; 

@JsonIgnore 
@ManyToOne 
private Passagier passagier; 

..

@Entity 
public class Passagier { 



@Id 
@GeneratedValue 
private UUID id; 


@OneToMany(cascade = CascadeType.ALL,mappedBy = "buchung") 
@JoinColumn(name = "passagier_id") 
private ArrayList<Buchung> buchungen = new ArrayList<>(); 

..

@Entity 
public class Faehre {  

@Id 
@GeneratedValue 
private UUID id; 


@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name="faehre_id") 
private List<Faehrfahrt> faehrfahrten = new ArrayList<>(); 

@JsonIgnore 
@ManyToOne 
private Strecke strecke; 

..

@Entity 
public class Faehrfahrt { 

private Date zeitpunkt; 

@Id 
@GeneratedValue 
private UUID id; 

@JsonIgnore 
@ManyToOne 
private Faehre faehre; 

@OneToMany(cascade = CascadeType.ALL, mappedBy = "buchung") 
@JoinColumn(name="faehrfahrt_id") 
private ArrayList<Buchung> buchungen = new ArrayList<>(); 

..

@Entity 
public class Strecke { 

@Id 
@GeneratedValue 
private UUID id; 


@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name="strecke_id") 
private List<Faehre> faehren = new ArrayList<>(); 

..

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: aiApp.applicationcore.faehrecomponent.Faehrfahrt.buchungen 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE] 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE] 
    at aiApp.applicationcore.Application.main(Application.java:35) [main/:na] 
Caused by: org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: aiApp.applicationcore.faehrecomponent.Faehrfahrt.buchungen 
     at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:322) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] 
     at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1892) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] 
     at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:911) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] 
     at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:738) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] 
     at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] 
     at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] 
     at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] 
     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final] 
     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final] 
     at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
     at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) ~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) ~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) ~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
     ... 16 common frames omitted 

回答

1

確定的基礎上,設置,你的配置應該或多或少類似如下:

Buchung

@Entity 
public class Buchung { 

    @JsonIgnore 
    @ManyToOne 
    @JoinColumn(name = "faehrfahrt_id") 
    private Faehrfahrt faehrfahrt; 

    @JsonIgnore 
    @ManyToOne 
    @JoinColumn(name = "passagier_id") 
    private Passagier passagier; 

} 

Passagier

@Entity 
public class Passagier { 

    @OneToMany(cascade = CascadeType.ALL,mappedBy = "passagier") 
    private List<Buchung> buchungen = new ArrayList<>(); 

} 

Faehre

@Entity 
public class Faehre {  

    @OneToMany(cascade = CascadeType.ALL, mappedBy="faehre") 
    private List<Faehrfahrt> faehrfahrten = new ArrayList<>(); 

    @JsonIgnore 
    @ManyToOne 
    @JoinColumn(name = "strecke_id") 
    private Strecke strecke; 

} 

Faehrfahrt

@Entity 
public class Faehrfahrt { 

    @JsonIgnore 
    @ManyToOne 
    @JoinColumn(name = "faehre_id") 
    private Faehre faehre; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "faehrafhrt") 
    private List<Buchung> buchungen = new ArrayList<>(); 

} 

Strecke

@Entity 
public class Strecke { 

    @OneToMany(cascade = CascadeType.ALL, mappedBy="strecke") 
    private List<Faehre> faehren = new ArrayList<>(); 

} 
+0

應用更改後,我仍然得到同樣的錯誤信息 – InDaPond

+2

試圖改變類型列表...不是ArrayList –

+0

謝謝,解決了它!多麼愚蠢的錯誤。 – InDaPond