Spring Boot JPA @Entity未定义为bean

时间:2018-09-27 00:51:59

标签: java spring-boot spring-data-jpa

我无法运行Spring Boot应用程序,因为JPA存在问题。但是我无法找到问题并解决。我在几个堆栈溢出主题中搜索了一种解决方案,但是甚至没有一种解决方案对我有帮助。我定义了以下模型:

height: 60px;

如您所见,实体使用正确的导入(javax.persistence.Entity)。我指出这一点,因为这是我遇到的解决方案之一。

我还定义了存储库的接口,如下所示:

package xyz.blackmonster.window.models;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import org.hibernate.annotations.GenericGenerator;

/**
 * Window order
 */
@Entity
public class Order {

    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid2")
    private String uuid;
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "order", cascade = CascadeType.ALL)
    private List<Window> windows;
    @OneToOne(fetch = FetchType.EAGER, mappedBy = "order", cascade = CascadeType.ALL)
    private Service service;
    @OneToOne(fetch = FetchType.EAGER, mappedBy = "order", cascade = CascadeType.ALL)
    private Cost cost;
    @Column(name = "email")
    private String email;

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public List<Window> getWindows() {
        return windows;
    }

    public void setWindows(List<Window> windows) {
        this.windows = windows;
    }

    public Service getService() {
        return service;
    }

    public void setService(Service service) {
        this.service = service;
    }

    public Cost getCost() {
        return cost;
    }

    public void setCost(Cost cost) {
        this.cost = cost;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

如您所见,通过谷歌搜索show,OrderRepository类没有@Repository批注。

几个解决方案指出,由于应用程序类在xyz.blackmonster.window.app包中,而实体在xyz.blackmonster.window.models包中,因此应用程序类需要两个附加注释来查找存储库并扫描实体。 :

package xyz.blackmonster.window.repositories;

import org.springframework.data.jpa.repository.JpaRepository;

import xyz.blackmonster.window.models.Order;

public interface OrderRepository extends JpaRepository<Order, String> {
}

我同时设置了@EnableJpaRepositories(“ xyz.blackmonster.window.repositories”)和@EntityScan(“ xyz.blackmonster.window.repositories”)设置。即使设置了所有这些配置,运行Spring Boot也会失败。我得到以下堆栈跟踪:

package xyz.blackmonster.window.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@ComponentScan("xyz.blackmonster.window")
@EnableJpaRepositories("xyz.blackmonster.window.repositories")
@EntityScan("xyz.blackmonster.window.repositories")
public class WindowAppApplication {

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

我在这里想念什么?

2 个答案:

答案 0 :(得分:1)

我发现了问题。我为实体定义了错误的包装类。该应用程序应将实体扫描设置为 xyz.blackmonster.window。模型 ,而不是设置了存储库的包。

这是固定代码:

package xyz.blackmonster.window.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@ComponentScan("xyz.blackmonster.window")
@EnableJpaRepositories("xyz.blackmonster.window.repositories")
@EntityScan("xyz.blackmonster.window.models")
public class WindowAppApplication {

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

答案 1 :(得分:1)

简单的解决方案在这里。

将您的WindowAppApplication类移至基本软件包:xyz.blackmonster.window而不是在应用程序下方并在下面使用,Spring Boot会为您神奇地完成所有工作。

@SpringBootApplication
public class WindowAppApplication {

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