[英]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.