2017-10-02 1 views
1

Je travaille sur des services Web avec démarrage reposantes Spring et JPA mais j'ai quelques problèmes comme çaSpring Boot EntityManagerFactory pas défini et @ManyToOne non autorisés

[ERREUR] Impossible d'exécuter but org.springframework. boot: spring-boot-maven-plugin: 1.5.3.RELEASE: exécute (default-cli) sur le projet SpringRest: Une exception s'est produite pendant l'exécution de . null: InvocationTargetException: Erreur lors de la création du bean avec le nom 'entityManagerFactory' défini dans la ressource de chemin de classe [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: L'appel de la méthode init a échoué; exception imbriquée est org.hibernate.AnnotationException: @Column (s) non autorisée sur une propriété de @ManyToOne: com.maven.nurcanyilmaz.models.Employee.department

pom.xml

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

<dependencies> 

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-rest</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
    </dependency> 
    <!-- JSTL for JSP --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
    </dependency> 

    <!-- For JSP compilation --> 
    <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-jasper</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
    <groupId>javax.transaction</groupId> 
    <artifactId>jta</artifactId> 
    <version>1.1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-lang3</artifactId> 
     <version>3.5</version> 
    </dependency> 

    <dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>3.8.1</version> 
    <scope>test</scope> 
    </dependency> 
</dependencies> 

entités

@Entity 
@Table(name="DEPARTMENT") 
public class Department { 

    @Id 
    @Column(name="Id",nullable=false,unique=true) 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int id; 
    @Column(name="Description",nullable=false) 
    private String description; 

    @OneToMany(mappedBy = "department", cascade = CascadeType.ALL) 
    private List<Employee> employees; 

    public Department() { 
     // TODO Auto-generated constructor stub 
    } 

    @Entity 
@Table(name="EMPLOYEE") 
public class Employee { 

    @Id 
    @Column(name="Id",nullable=false,unique=true) 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private long id; 

    @Column(name="Name",nullable=false) 
    private String name; 

    @Column(name="Surname",nullable=false) 
    private String surname; 
    @Column(name="Salary",nullable=false) 
    private double salary; 

    @Column(name="Department" , nullable=false) 
    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "Id",referencedColumnName="Id") 
    private Department department; 

    public Employee() { 
     // TODO Auto-generated constructor stub 
    } 

dépôts

import com.maven.nurcanyilmaz.models.Employee; 
import org.springframework.data.repository.CrudRepository; 
import org.springframework.data.rest.core.annotation.RepositoryRestResource; 

@RepositoryRestResource 
public interface EmployeeRepository extends CrudRepository<Employee, Long> { 

    Employee findByName(String name); 

} 


import org.springframework.data.repository.CrudRepository; 
import org.springframework.data.rest.core.annotation.RepositoryRestResource; 

import com.maven.nurcanyilmaz.models.Department; 

@RepositoryRestResource 
public interface DepartmentRepository extends CrudRepository<Department, Long> { 

    Department findByName(String name); 
} 

application.properties

spring.mvc.view.prefix: /WEB-INF/ 
spring.mvc.view.suffix: .jsp 
server.port=8088 

spring.datasource.url = jdbc:mysql://localhost:3306/EmployeeDb 
spring.datasource.username =root 
spring.datasource.password =test 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

# Keep the connection alive if idle for a long time (needed in production) 
spring.datasource.testWhileIdle = true 
spring.datasource.validationQuery = SELECT 1 

# Show or not log for each sql query 
spring.jpa.show-sql = true 

# Hibernate ddl auto (create, create-drop, update) 
spring.jpa.hibernate.ddl-auto = create-drop 

spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy 


spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect 
server.error.whitelabel.enabled=false 
+1

Qu'est-ce qui n'est pas clair à propos de l'exception? '@Column (s) non autorisé sur une propriété @ManyToOne' est assez clair sur ce qui ne va pas. –

Répondre

1

Dans employé Entité pour le département du service privé, vous utilisez @column et @JoinColumn ensemble, ce qui semble être le problème. En regardant vos entités, vous êtes censé utiliser @JoinColumn mais pas @Column.

+0

merci mais j'ai encore l'exception entitymanagerfactory. Par ailleurs, @joinColumn a deux travaux. Donner le nom et la cartographie. donc je ne peux pas les utiliser ensemble c'est juste? –

+0

pouvez-vous s'il vous plaît envoyer l'erreur que vous avez maintenant –

+0

InvocationTargetException: Erreur de création de bean avec le nom «departmentController» défini dans le fichier [/home/nurcan/workspace/SpringRest/target/classes/com/maven/controllers/DepartmentController.class]: Le post-traitement de la définition du bean fusionné a échoué; l'exception imbriquée est java.lang.IllegalStateException: le type de champ spécifié [interface com.maven.nurcanyilmaz.repositories.DepartmentRepository] est incompatible avec le type de ressource [javax.persistence.EntityManager] –

0

Hibernate ne permet pas d'utiliser l'annotation @Column avec @ManyToOne.

Vous pouvez utiliser @JoinColumn si vous souhaitez spécifier le nom de la colonne