Spring JPA с использованием SQLite: Filed * repository * требуется компонент с именем entityManagerFactory, который не может быть найден - PullRequest
0 голосов
/ 16 ноября 2018

Я относительно новичок в использовании Spring JPA, и я потратил пару часов, пытаясь решить эту проблему.Я знаю, что этот вопрос задавался много раз, и я пробовал многие из их решений безрезультатно (скорее всего, из-за моего собственного опыта, я много раз терял себя в попытке опробовать их решения).Я удалил свою папку репозитория .m2, как некоторые предлагали, я удостоверился в том, чтобы поместить зависимость диалекта SQLite в свой pom.xml, и я даже попытался создать класс конфигурации, в котором я бы создал этот bean-компонент вручную (но, как уже упоминалось, я получилнастолько потерянный в том, что происходило, что я решил удалить это после того, как это не могло бежать снова).Я пытаюсь подключить свою базу данных SQLite к моему проекту Spring JPA (кажется, что не многие люди используют SQLite для своих проектов Spring JPA, так как мне не удалось найти четкое руководство / документацию при этом).Вот соответствующие файлы:

Приложение Main

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


@SpringBootApplication
@EnableJpaRepositories
public class myApplication {
    public static void main(String[] args) {
    SpringApplication.run(myApplication.class, args);
}
} 

Мой репозиторий

import org.springframework.data.repository.JpaRepository;
import java.util.List;

public interface UserRepository extends JpaRepository<User, Integer> {
    List<User> getUsers();
}

Мой объект

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

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int user_id;

    @Column(name="user_name")
    private String user_name;

    @Column(name="user_password")
    private String user_password;


    protected User() {}

    public User(String user_name, String user_password) {
        this.user_name = user_name;
        this.user_password = user_password;
    }

    public int getUser_id() {
        return user_id;
    }

    public void setUser_id(int user_id) {
        this.user_id = user_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getUser_password() {
        return user_password;
    }

    public void setUser_password(String user_password) {
        this.user_password = user_password;
    }

    @Override
    public String toString() {
        return String.format("User[id=%d, user_name='%s']", user_id, user_name);
    }
}

Мой сервис

@Service
public class myService {

    @Autowired
    UserRepository userRepository;

    public List<User> getUsers() {
        return userRepository.getUsers();
    }
}

Свойства приложения

spring.datasource.url= jdbc:sqlite:memory:database/myDB
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.datasource.username = ""
spring.datasource.password = ""
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLiteDialect
spring.jpa.generate-ddl=true

POM

<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.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.23.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.hibernate.dialect/sqlite-dialect -->
<dependency>
    <groupId>org.hibernate.dialect</groupId>
    <artifactId>sqlite-dialect</artifactId>
    <version>0.1.0</version>
</dependency>

Как указано в заголовке, проблема заключается в том, что компонент с именем entityManagerFactory не может быть найден:

Field userRepository in com.project.myService required a bean named 'entityManagerFactory' that could not be found.

Я думал, что Spring может автоматически определять бины, необходимые для вашего проекта, и автоматически генерирует их для вас?Многие учебники, которые используют MySQL и встроенную базу данных Spring, похоже, никогда не сталкивались с этой проблемой.Это в основном проблема при использовании SQLite с Spring JPA?Буду очень признателен за рекомендации по настройке SQLite для работы с Spring JPA, спасибо!

...