我无法运行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);
}
}
我在这里想念什么?
答案 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);
}
}