2017-11-21 10 views
0

私はPostgres DBでSpringブートプロジェクトを作成しました。 ProjectとTaxonomyとは1対多の関係があります。つまり、1つのプロジェクトには1つのTaxonomyしか持たないが、Taxonomyには複数のプロジェクトを持つことができます。私はこの関係を指定しなければ動作しますが、関係を導入した後では例外が発生します。Springブート - 1対多の関係 - エラー 'entityManagerFactory'

モデル

Taxonomy.java

package ebi.uk.eva.model; 

import java.util.ArrayList; 
import java.util.List; 
import javax.persistence.*; 
import javax.validation.constraints.NotNull; 
import ebi.uk.eva.model.Project; 

@Entity 
@Table(name = "taxonomy") 
public class Taxonomy { 

@Id 
@Column(name = "id", unique = true, nullable = false) 
private long id; 

@Column(name = "taxonomy_common_name") 
@NotNull 
private String commonName; 

private List<Project> projects = new ArrayList<>(); 

public Taxonomy() { 

} 

public long getId() { 
    return id; 
} 

public void setId(long id) { 
    this.id = id; 
} 

public String getCommonName() { 
    return commonName; 
} 

public void setCommonName(String commonName) { 
    this.commonName = commonName; 
} 

@OneToMany(mappedBy = "taxonomy", cascade = CascadeType.ALL) 
public List<Project> getProjects() { 
    return projects; 
} 

public void setProjects(List<Project> projects) { 
    this.projects = projects; 
} 
} 

Project.java

package ebi.uk.eva.model; 

import javax.persistence.*; 
import javax.validation.constraints.NotNull; 

@Entity 
@Table(name = "Project") 
public class Project { 

@Id 
@Column(name = "id", unique = true, nullable = false) 
private String id; 

@Column(name = "title") 
@NotNull 
private String title; 

private Taxonomy taxomony; 

public Project() { 

} 

public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

@ManyToOne 
@JoinColumn(name = "taxonomy_id") 
public Taxonomy getTaxomony() { 
    return taxomony; 
} 

public void setTaxomony(Taxonomy taxomony) { 
    this.taxomony = taxomony; 
} 
} 

ProjectRepository.Java

package ebi.uk.eva.repository; 

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.stereotype.Repository; 
import ebi.uk.eva.model.Project; 

@Repository 
public interface ProjectRepository extends JpaRepository<Project, String>{ 
} 

Appication.properties

spring.datasource.driverClassName=org.postgresql.Driver 
spring.datasource.url=jdbc:postgresql://localhost:5432/evadb 
spring.datasource.username=postgres 
spring.datasource.password=**** 
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect 
spring.jpa.hibernate.ddl-auto=update 
spring.jpa.show-sql=true 

Application.java(メイン)

package ebi.uk.eva; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class EvaApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(EvaApplication.class, args); 
    } 
} 

のpom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>ebi.uk.eva</groupId> 
<artifactId>EBIProject</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>EBIProject</name> 
<description>EBI test project</description> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.8.RELEASE</version> 
    <relativePath/> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    <java.version>1.8</java.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
    </dependency> 
    <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>5.2.12.Final</version> 
     </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>5.2.2.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 
</project> 

エラー

017-11-21 06:52:17.899 INFO 75167 --- [   main] utoConfigurationReportLoggingInitializer : 

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 
2017-11-21 06:52:17.913 ERROR 75167 --- [   main] o.s.boot.SpringApplication    : Application startup failed 

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 javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] 
    at ebi.uk.eva.EvaApplication.main(EvaApplication.java:18) [classes/:na] 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:967) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final] 
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] 
    ... 16 common frames omitted 
Caused by: org.hibernate.MappingException: Could not determine type for: ebi.uk.eva.model.Taxonomy, at table: project, for columns: [org.hibernate.mapping.Column(taxomony)] 
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:455) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final] 
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:422) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final] 
    at org.hibernate.mapping.Property.isValid(Property.java:226) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final] 
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:597) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final] 
    at org.hibernate.mapping.RootClass.validate(RootClass.java:265) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final] 
    at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:329) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final] 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:451) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:889) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final] 
    ... 22 common frames omitted 

助けてください。ありがとう。

答えて

0

あなたはProjectクラスにタイプミスがあります。 mappedByは、「分類」に設定され、プロジェクトのフィールドは、「taxomony」

Caused by: org.hibernate.MappingException: Could not determine type for: ebi.uk.eva.model.Taxonomy, at table: project, for columns: [org.hibernate.mapping.Column(taxomony)]

@Entity 
@Table(name = "taxonomy") 
public class Taxonomy { 
/// 
@OneToMany(mappedBy = "taxonomy", cascade = CascadeType.ALL) 
public List<Project> getProjects() { 
    return projects; 
} 
/// 
} 

@Entity 
@Table(name = "Project") 
public class Project { 

    /// 

    private Taxonomy taxomony; 
    /// 

    @ManyToOne 
    @JoinColumn(name = "taxonomy_id") 
    public Taxonomy getTaxomony() { 
     return taxomony; 
    } 

    public void setTaxomony(Taxonomy taxomony) { 
     this.taxomony = taxomony; 
    } 
} 
+0

申し訳ありませんが命名され、私はタイプミスを修正しますが(とゲッターとセッターが)、私は同じ問題を取得します – user2125889