bean-компонент с именем entityManagerFactory не найден - PullRequest
0 голосов
/ 25 декабря 2018

Мое приложение не запускается.Он состоит из Spring Boot + JPA + SQLite.Но Spring Boot и MySQL работают нормально.Я не понимаю, почему это происходит.

Ошибка:

bean с именем 'entityManagerFactory' не найден

 <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.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.15.1</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.2.3.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.1.4.Final</version>
        </dependency>

Код:

@Entity
public class Contact implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    int ContactID;
    String Number;
    String textMessage;
    String DownloadID;
    long ContactFlags;

    public int getContactID() {
        return ContactID;
    }

    public void setContactID(int contactID) {
        ContactID = contactID;
    }

    public String getNumber() {
        return Number;
    }

    public void setNumber(String number) {
        Number = number;
    }

    public String getTextMessage() {
        return textMessage;
    }

    public void setTextMessage(String textMessage) {
        this.textMessage = textMessage;
    }

    public String getDownloadID() {
        return DownloadID;
    }

    public void setDownloadID(String downloadID) {
        DownloadID = downloadID;
    }

    public long getContactFlags() {
        return ContactFlags;
    }

    public void setContactFlags(long contactFlags) {
        ContactFlags = contactFlags;
    }
}

public interface ContactRepository extends CrudRepository<Contact,Integer> {
}

@Configuration
public class DBConfig {
    @Bean
    public DataSource dataSource(){
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName("org.sqlite.JDBC");
        dataSourceBuilder.url("jdbc:sqlite::/home/vivien/viber.db");
        return dataSourceBuilder.build();
    }
}

public class SQLiteDialect extends Dialect {    
    SQLiteDialect(){
        registerColumnType(Types.BIT, "integer");
        registerColumnType(Types.TINYINT, "tinyint");
        registerColumnType(Types.SMALLINT, "smallint");
        registerColumnType(Types.INTEGER, "integer");
        registerColumnType(Types.BIGINT, "bigint");
        registerColumnType(Types.FLOAT, "float");
        registerColumnType(Types.REAL, "real");
        registerColumnType(Types.DOUBLE, "double");
        registerColumnType(Types.NUMERIC, "numeric");
        registerColumnType(Types.DECIMAL, "decimal");
        registerColumnType(Types.CHAR, "char");
        registerColumnType(Types.VARCHAR, "varchar");
        registerColumnType(Types.LONGVARCHAR, "longvarchar");
        registerColumnType(Types.DATE, "date");
        registerColumnType(Types.TIME, "time");
        registerColumnType(Types.TIMESTAMP, "timestamp");
        registerColumnType(Types.BINARY, "blob");
        registerColumnType(Types.VARBINARY, "blob");
        registerColumnType(Types.LONGVARBINARY, "blob");
        // registerColumnType(Types.NULL, "null");
        registerColumnType(Types.BLOB, "blob");
        registerColumnType(Types.CLOB, "clob");
        registerColumnType(Types.BOOLEAN, "integer");
        registerFunction( "concat", new VarArgsSQLFunction(StringType.INSTANCE, "", "||", "") );
        registerFunction( "mod", new SQLFunctionTemplate( StringType.INSTANCE, "?1 % ?2" ) );
        registerFunction( "substr", new StandardSQLFunction("substr", StringType.INSTANCE) );
        registerFunction( "substring", new StandardSQLFunction( "substr", StringType.INSTANCE) );
    }
    public boolean supportsIdentityColumns() {
        return true;
    }

    spring.datasource.url=jdbc:sqlite::/home/vivien/viber.db
    spring.datasource.driver-class-name = org.sqlite.JDBC
    spring.datasource.username=
    spring.datasource.password=
    spring.jpa.database-platform=com.example.demo.SQLiteDialect
    spring.jpa.show-sql=true

    @RestController
public class MyController {
     @Autowired
    ContactRepository contactRepository;

    @GetMapping("/hello")
    public String Hello(){
        return "Hello Sqlite";
    }

    @GetMapping("/all")
    public Iterable<Contact> getAll(){
        return contactRepository.findAll();
    }
}

Сообщение об ошибке:

Ошибка запуска ApplicationContext.Чтобы отобразить отчет об условиях, повторно запустите ваше приложение с включенной отладкой.

2018-12-25 17: 35: 44.340 ОШИБКА 25591 --- [main]

osbdLoggingFailureAnalysisReporter:

***************************************
Приложение не удалось запустить
***************************************

Описание:

Поле contactRepository в com.example.demo.controller.MyController требуется компонент с именем entityManagerFactory, который не может быть найден.

Точка внедрения имеет следующие аннотации:
- @org.springframework.beans.factory.annotation.Autowired (обязательно = true)

1 Ответ

0 голосов
/ 26 декабря 2018

Проблема в том, что вы автоматически подключили EntityManagerFactory в своем классе MyController.EntityManagerFactory не может быть введен напрямую с помощью @Autowired или @ Resource

Если вам нужно внедрение зависимостей для EntityMananger, используйте

@PersistenceContext
private EntityManager entityManager;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...