Я новичок в SpringBoot. Я написал образец службы, которая принимает детали проекта и сохраняет их в базе данных postgres. Однако я не могу запустить свое приложение и не уверен, что не так. Я проверил иерархию пакетов, и вроде все в порядке. Любая помощь приветствуется.
Я не создавал таблицу в базе данных, я делаю это через JPA, когда отправляю запрос POST.
package com.poc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProjectPocApiApplication {
public static void main(String[] args) {
SpringApplication.run(ProjectPocApiApplication.class, args);
}
}
package com.poc.project;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String id;
@Id
private String name;
private String status;
private String priority;
private String manager;
private String comments;
public Project() {}
public Project(String id, String name, String status, String priority, String manager, String comments) {
super();
this.id = id;
this.name = name;
this.status = status;
this.priority = priority;
this.manager = manager;
this.comments = comments;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getPriority() {
return priority;
}
public void setPriority(String priority) {
this.priority = priority;
}
public String getManager() {
return manager;
}
public void setManager(String manager) {
this.manager = manager;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
}
package com.poc.project;
import org.springframework.data.repository.CrudRepository;
public interface ProjectRepository extends CrudRepository<Project,String> {
public Project findByName(String name);
public void delete(String name);
}
package com.poc.project;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProjectController {
@Autowired
private ProjectService projectService;
@RequestMapping(method=RequestMethod.GET, value = "/projects")
public List<Project> getAllProjects(){
return projectService.getAllProjects();
}
@RequestMapping(method=RequestMethod.GET, value = "/projects/{name}")
public Project getProject(@PathVariable String name){
return projectService.getProject(name);
}
@RequestMapping(method=RequestMethod.POST, value = "/projects")
public void addProject(@RequestBody Project project){
projectService.addProject(project);
}
@RequestMapping(method=RequestMethod.POST, value = "/projects/{name}")
public void updateProject(@RequestBody Project project, @PathVariable String name){
projectService.updateProject(name, project);
}
@RequestMapping(method=RequestMethod.GET, value = "/projects/{name}")
public void deleteProject(@PathVariable String name){
projectService.deleteProject(name);
}
}
package com.poc.project;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ProjectService {
@Autowired
private ProjectRepository projectRepository;
public List<Project> getAllProjects(){
List<Project> projects = new ArrayList<>();
projectRepository.findAll().forEach(projects::add);
return projects;
}
public Project getProject(String name) {
return projectRepository.findByName(name);
}
public void addProject(Project project){
projectRepository.save(project);
}
public void updateProject(String name, Project project) {
projectRepository.save(project);
}
public void deleteProject(String name) {
projectRepository.delete(name);
}
}
<?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>com.poc.project</groupId>
<artifactId>project-poc-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>project-poc-api</name>
<description>POC for Project Management Dashboard </description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.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.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.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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498
at org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl.useContextualLobCreation(LobCreatorBuilderImpl.java:113) [hibernate-core-5.2.16.Final.jar:5.2.16.Final]
Caused by: java.sql.SQLFeatureNotSupportedException: Method org.postgresql.jdbc.PgConnection.createClob()
at org.postgresql.Driver.notImplemented(Driver.java:683)
at org.postgresql.jdbc.PgConnection.createClob(PgConnection.java:1252)
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'projectController': Unsatisfied dependency expressed through field 'projectService'; nested exception is org.springframework.beans.factory.
UnsatisfiedDependencyException: Error creating bean with name 'projectService': Unsatisfied dependency expressed through field 'projectRepository'; nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'projectRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.poc.project.Project
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:587) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'projectService':
Unsatisfied dependency expressed through field 'projectRepository'; nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'projectRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.poc.project.Project
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'projectRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.poc.project.Project
Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.poc.project.Project
Похоже, вы забыли добавить что-нибудь для "Console Output #"?
@MaxPower и всегда учиться. Извини за это. Теперь я включил весь требуемый код и вывод консоли
Проверьте это: stackoverflow.com/questions/46246104/…. Помимо добавления аннотации @Entity к проекту, вам также потребуется использовать аннотации @EnableJpaRepositorie и @EntityScan в классе конфигурации, как показано.
@TheHeadRush Спасибо за помощь! Я внес изменения, а не получаю org.springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем entityManagerFactory, определенным в ресурсе пути к классу: Не удалось вызвать метод инициализации; вложенное исключение - javax.persistence.PersistenceException: невозможно создать Hibernate SessionFactory; вложенное исключение - org.hibernate.MappingException: класс Composite-id должен реализовывать Serializable:
Я считаю, что это связано с использованием двух первичных ключей, не знаю, что мне нужно сделать, чтобы решить эту проблему.
Можете ли вы сделать ПК несоставным?
Я мог бы это сделать, но я бы предпочел иметь два ПК.
Могу я спросить, зачем вам первичные ключи? Для меня это приводит к более глубоким проблемам с дизайном. Вы можете сделать любое поле уникальным или проиндексировать его без необходимости быть PK. PK должен быть полем или комбинацией полей, которые можно использовать для однозначной идентификации записи.






Вы должны аннотировать свой репозиторий аннотацией @Repository.
Какую зависимость он не создает?