简体   繁体   English

无法使用 spring 引导将数据保存到数据库

[英]Not able to save data to the database using spring boot

When I am running the test class public void testCreate() , the test is running without error but I am not able to save any data to the DB.当我运行测试 class public void testCreate()时,测试运行没有错误,但我无法将任何数据保存到数据库。

I have created a Product.java model class, and then using created a ProductRepository.java extending CrudRepository.java to interact with the MySQL DB. I have created a Product.java model class, and then using created a ProductRepository.java extending CrudRepository.java to interact with the MySQL DB.

My Spring boot version is 2.2.0.RELEASE Below are my classes:我的 Spring 启动版本是 2.2.0.RELEASE 下面是我的课程:

Product.java产品.java

package com.hibernate.productData.entities;



import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;



@Entity

@Table

public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String name;

    @Column(name="description")
    private String desc;

    private Double price;

    public int getId() {

    return id;

}

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

public String getName() {return name;}

public void setName(String name) {this.name = name;}

public String getDesc() {return desc;}

public void setDesc(String desc) {this.desc = desc;}

public Double getPrice() {return price;}

public void setPrice(Double price) {this.price = price;}

}

ProductRepository.java ProductRepository.java

package com.hibernate.productData.repository;
import java.util.Optional;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.hibernate.productData.entities.Product;

@Repository
public class ProductRepository implements CrudRepository<Product, Integer>
{
@Override
public <S extends Product> S save(S entity) {
// TODO Auto-generated method stub
return null;
}



@Override

public <S extends Product> Iterable<S> saveAll(Iterable<S> entities) {

// TODO Auto-generated method stub

return null;

}



@Override

public Optional<Product> findById(Integer id) {

// TODO Auto-generated method stub

return null;

}



@Override

public boolean existsById(Integer id) {

// TODO Auto-generated method stub

return false;

}



@Override

public Iterable<Product> findAll() {

// TODO Auto-generated method stub

return null;

}



@Override

public Iterable<Product> findAllById(Iterable<Integer> ids) {

// TODO Auto-generated method stub

return null;

}



@Override

public long count() {

// TODO Auto-generated method stub

return 0;

}



@Override

public void deleteById(Integer id) {

// TODO Auto-generated method stub

}



@Override

public void delete(Product entity) {

// TODO Auto-generated method stub

}



@Override

public void deleteAll(Iterable<? extends Product> entities) {

// TODO Auto-generated method stub

}



@Override

public void deleteAll() {

// TODO Auto-generated method stub

}



}

ProductDataApplicationTests.java产品数据ApplicationTests.java



package com.hibernate.productData;



import org.junit.jupiter.api.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;



import com.hibernate.productData.entities.Product;

import com.hibernate.productData.repository.ProductRepository;



@RunWith(SpringRunner.class)

@SpringBootTest

class ProductDataApplicationTests {



@Autowired

ProductRepository repos;

@Test

void contextLoads() {

}

@Test

public void testCreate()

{

Product p = new Product();

p.setId(1);

p.setName("harry potter");

p.setDesc("Awesome");

p.setPrice(100d);

    repos.save(p);

}

}

application.properties应用程序属性

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=Pblock@10

pom.xml pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hibernate.productData</groupId>
    <artifactId>productData</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>productData</name>
    <description>Hibernate project</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

the test is running without error but I am not able to save any data to the DB.测试运行没有错误,但我无法将任何数据保存到数据库。

I think that may be because you have overridden the CrudRepository's save method.我认为这可能是因为您覆盖了 CrudRepository 的保存方法。 I have not seen this done anywhere.我在任何地方都没有看到这样做。 Try to replace your implementation of ProductRepository with尝试将 ProductRepository 的实现替换为

package com.hibernate.productData.repository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.hibernate.productData.entities.Product;

@Repository
public interface ProductRepository extends CrudRepository<Product, Integer>
{
}

What I think is happening is that your save method's implementation is being called which does nothing.我认为正在发生的是你的保存方法的实现被调用,它什么都不做。

The reason behind your values not getting saved in DB is that you have implemented the CrudRepository and if that's what you want to do then you need to provide your implementation for the overridden methods such as save() , saveAll() , etc.您的值未保存在数据库中的原因是您已经实现了CrudRepository ,如果这是您想要做的,那么您需要为overridden的方法提供您的实现,例如save()saveAll()等。

If you want to use the default implementation you can extend the CrudRepository instead of extending it.如果你想使用default implementation ,你可以扩展CrudRepository而不是扩展它。

package com.hibernate.productData.repository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.hibernate.productData.entities.Product;

@Repository
public interface ProductRepository extends CrudRepository<Product, Integer>
{
}

I hope this should help you with the issue.我希望这可以帮助您解决这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM