首页 > 解决方案 > 带有postgres sql的spring boot框架,运行时发生异常

问题描述

例外是:

An exception occurred while running. null: InvocationTargetException: Error creating bean with name 'machineController': Unsatisfied dependency expressed through field 'machineRepository': Error creating bean with name 'machineRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property machine found for type Machine!; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'machineRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property machine found for type Machine!

编码的编辑器,是子线,项目的代码

主要的

springboot 应用的主类

package com.brommarest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
importorg.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@EntityScan(basePackages = {"com.brommarest.entities" })
@EnableJpaRepositories(basePackages = {"com.brommarest.repositories"})
public class BrommaRestApplication {
public static void main(String[] args) {
    SpringApplication.run(BrommaRestApplication.class, args);
}

}

Repositories存储库文件,MachineRepository.java 机器实体的存储库

package com.brommarest.repositories;
import com.brommarest.entities.Machine;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
import java.util.Set;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;

@Repository
public interface MachineRepository extends JpaRepository<Machine, Integer> {

// custom query to search to machine  by type or description
List<Machine> findBymachine_typeOrmachine_desc(String text, String 
textAgain);

}

实体实体文件,Machine.java

存储库的实体类

package com.brommarest.entities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Machine {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int machine_id;

private String machine_type;
private String machine_desc;
private String date_added;    

public Machine() {  }

public Machine(String machine_type, String machine_desc, String date_added) 
{
    this.setTitle(machine_type);
    this.setDesc(machine_desc);
    this.setDate(date_added);
}   

public Machine(int machine_id, String machine_type, String machine_desc, 
String date_added) {
    this.setId(machine_id);
    this.setTitle(machine_type);
    this.setDesc(machine_desc);
    this.setDate(date_added);

}

public int getId() {
    return machine_id;
}

public void setId(int machine_id) {
    this.machine_id = machine_id;
}

public String getTitle() {
    return machine_type;
}

public void setTitle(String machine_type) {
    this.machine_type = machine_type;
}

public String getDesc() {
    return machine_desc;
}

public void setDesc(String machine_desc) {
    this.machine_desc = machine_desc;


}
public String getDate() {
    return date_added;
}

public void setDate(String date_added) {
    this.date_added = date_added;

}

@Override
public String toString() {
    return "Machine{" +
            "machine_id=" + machine_id +
            ", machine_type='" + machine_type + '\'' +
            ", machine_desc='" + machine_desc + '\'' +
            ", date_added='" + date_added + '\'' +
            '}';
 }
}

控制器MachineController.java

项目负责人

package com.brommarest.controllers;
import com.brommarest.entities.Machine;
import com.brommarest.repositories.MachineRepository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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;

import java.util.List;
import java.util.Map;

@RestController
public class MachineController {

@Autowired
MachineRepository machineRepository;

@GetMapping("/machine")
public List<Machine> index(){
    return machineRepository.findAll();
}

@GetMapping("/machine/{machine_id}")
public Machine show(@PathVariable String machine_id){
    int machineId = Integer.parseInt(machine_id);
    return machineRepository.findOne(machineId);
}

@PostMapping("/machine/search")
public List<Machine> search(@RequestBody Map<String, String> body){
    String searchTerm = body.get("text");
    return machineRepository.findBymachine_typegOrmachine_desc(searchTerm, 
searchTerm);
}

@PostMapping("/machine")
public Machine create(@RequestBody Map<String, String> body){
    String machine_type = body.get("machine_type");
    String machine_desc = body.get("machine_desc");
    String date_added   = body.get("date_added");

    return machineRepository.save(new Machine(machine_type, machine_desc, 
date_added));
}

@PutMapping("/machine/{machine_id}")
public Machine update(@PathVariable String machine_id, @RequestBody 
Map<String, String> body){
    int machineId = Integer.parseInt(machine_id);
    // getting machine
    //Machine machine = MachineRepository.findOne(machineId);
    Machine machine = machineRepository.findOne(machineId);


    machine.setTitle(body.get("machine_type"));
    machine.setDesc(body.get("machine_desc"));

    return machineRepository.save(machine);
} 

@DeleteMapping("/machine/{machine_id}")
public boolean delete(@PathVariable String machine_id){
    int machineId = Integer.parseInt(machine_id);
    machineRepository.delete(machineId);
    return true;
}
}

应用程序属性

spring.jpa.database=POSTGRESQL
spring.datasource.platform=postgres
spring.jpa.show-sql=true
spring.database.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=default
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR

.pom 文件

<groupId>com.brommarest</groupId>
<artifactId>brommarest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Bromma-REST</name>
<description>Bromma-REST API'S project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
    <relativePath/>
    <!-- lookup parent from repository -->
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-social-twitter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
    </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>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-
 beanutils -->
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.2</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

   </plugins>
</build>

</project>

标签: javaspringspring-boot

解决方案


接口签名应遵循名称约定。Spring 根据方法签名生成查询,但它不能。

我想您应该将属性名称大写。请试试这个:

List<Machine> findByMachine_typeOrMachine_desc(String text, String 
textAgain);

推荐阅读