Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot - "Error creating bean with name 'entityManagerFactory'" - Start

I have seen a lot of questions but the answers are not satisfying my problem... I start with Spring Boot and I am completely lost.

The error is :

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: No identifier specified for entity: pack.datas.entities.Degree

/// others lines

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: pack.datas.entities.Degree

The entry point :

package pack;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
@RestController
@EntityScan
public class CandidatesRecruitmentApplication {



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

The classes :

package pack.datas;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

import org.hibernate.jpa.boot.spi.EntityManagerFactoryBuilder;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.stereotype.Component;

@Component
@Configuration
@EnableJpaRepositories
public class DatasFactory {

    private DataSource dataSource;

    public DatasFactory() {
        super();
    }

    @Bean
    @ConfigurationProperties(prefix="spring.datasource")
    public DataSource dataSource() {
        if(this.dataSource == null)
            return this.dataSource = DataSourceBuilder.create().build();
        else
            return this.dataSource;
    }

package pack.datas.entities;

import java.io.Serializable;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Table;

import org.springframework.data.annotation.Id;

@Entity
@Table(name = "degree")
public class Degree implements Serializable {

    private static final long serialVersionUID = -8900492704842756948L;

    @Id
    @GeneratedValue
    @Column(name = "pk_id")
    private Integer id;

    @Column(name = "degree_i")
    private Integer degreeId;

    @Column(name = "degree_s_en")
    private String degreeEn;

    @Column(name = "degree_s_fr")
    private String degreeFr;

    protected Degree() {
    }

    public Degree(Integer id, Integer degreeId, String degreeEn, String degreeFr) {
        super();
        this.id = id;
        this.degreeId = degreeId;
        this.degreeEn = degreeEn;
        this.degreeFr = degreeFr;
    }

    public Integer getId() {
        return id;
    }

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

    public Integer getDegreeId() {
        return degreeId;
    }

    public void setDegreeId(Integer degreeId) {
        this.degreeId = degreeId;
    }

    public String getDegreeEn() {
        return degreeEn;
    }

    public void setDegreeEn(String degreeEn) {
        this.degreeEn = degreeEn;
    }

    public String getDegreeFr() {
        return degreeFr;
    }

    public void setDegreeFr(String degreeFr) {
        this.degreeFr = degreeFr;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime * result + ((degreeEn == null) ? 0 : degreeEn.hashCode());
        result = prime * result + ((degreeFr == null) ? 0 : degreeFr.hashCode());
        result = prime * result + ((degreeId == null) ? 0 : degreeId.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Degree other = (Degree) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        if (degreeEn == null) {
            if (other.degreeEn != null)
                return false;
        } else if (!degreeEn.equals(other.degreeEn))
            return false;
        if (degreeFr == null) {
            if (other.degreeFr != null)
                return false;
        } else if (!degreeFr.equals(other.degreeFr))
            return false;
        if (degreeId == null) {
            if (other.degreeId != null)
                return false;
        } else if (!degreeId.equals(other.degreeId))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "Degree [ " + degreeId + " - " + degreeEn + "/" + degreeFr + " ]";
    }

}

package pack.datas.controller;

import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class DaoController {

    @GetMapping("/")
    @ResponseBody
    @Transactional(readOnly = true)
    String home() {
        return "<h1>Test Program</h1>";
    }
}

The 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>pack</groupId>
    <artifactId>candidates-recruitment</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>candidates-recruitment</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </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.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.maven.surefire/surefire-api -->
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-api</artifactId>
            <version>2.19.1</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
        <repository>
            <id>org.jboss.repository.releases</id>
            <name>JBoss Maven Release Repository</name>
            <url>https://repository.jboss.org/nexus/content/repositories/releases</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>

</project>

The application.yml :

# DATASOURCE (DataSourceProperties)
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/recruitments_db
    username: postgresql
    password: postgresql
    driver-class-name: org.postgresql.Driver

# HIBERNATE (HibernateProperties)
hibernate:
  dialect: org.hibernate.dialect.PostgreSQLDialect
  show_sql: true
  hbm2ddl.auto: create

#SECURITY (SecuriyProperties)
security:
  user:
    name: TestU
    password: Test1

Please, I need your help !

like image 873
ReNaR Avatar asked Dec 29 '16 18:12

ReNaR


Video Answer


1 Answers

Seems like you used @Id annotation from the wrong package in your Degree class. Change your import from org.springframework.data.annotation.Id to javax.persistence.Id. That should help with the exception you're getting.

like image 87
Piotr Podraza Avatar answered Sep 23 '22 08:09

Piotr Podraza