mysql - Spring Boot+Hibernate向mysql插入空值

标签 mysql spring hibernate jpa

我有这样的配置(使用 Maven):

pom.xml

<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>springbootPlural</groupId>
  <artifactId>das-boot</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>


  <name>das-boot</name>
  <url>http://maven.apache.org</url>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
    <relativePath/>
  </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>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <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>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.39</version>
    </dependency>
  </dependencies>
</project>

应用程序属性:

server.port=0 #(for random port)

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.datasource.url=jdbc:mysql://localhost:3306/mojabaza
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

User.class
package com.test.testowa.model;

import org.springframework.data.jpa.domain.AbstractPersistable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User extends AbstractPersistable<Long> {

    private String userId;
    private String userName;
    private String password;

    public User() {

    }


    public User(String userId, String userName, String password) {
        this.userId = userId;
        this.userName = userName;
        this.password = password;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

UserController.class

package com.test.testowa.controller;

import com.test.testowa.Service.UserService;
import com.test.testowa.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    private UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }


    @RequestMapping("/delete/{id}")
    public String deleteUser(@PathVariable Long id)
    {
        return userService.deleteUser(id);
    }


    @RequestMapping("/add")
    public User addUser(User user)
    {
        return userService.addUser(user);
    }


    @RequestMapping("/list/{id}")
    public User findOne(@PathVariable Long id)
    {

        return userService.findOne(id);
    }

    @RequestMapping("/list")
    public List<User> userList()
    {
        return userService.userList();
    }



}

UserServiceImpl.class

package com.test.testowa.Service.impl;

import com.test.testowa.Service.UserService;
import com.test.testowa.model.User;
import com.test.testowa.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

private UserRepository userRepository;

@Autowired
    public UserServiceImpl(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public List<User> userList() {
        return userRepository.findAll();
    }


    @Override
    public User findOne(Long id) {
        return userRepository.findOne(id);
    }

    @Override
    public User addUser(User user) {
        return userRepository.save(user);
    }

    @Override
    public String deleteUser(Long id) {
        userRepository.delete(id);
    return "{'message':'User deleted'}";
    }
}

UserRepository.class

package com.test.testowa.repository;

import com.test.testowa.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {


}

UserService.class

包com.test.testowa.Service;

import com.test.testowa.model.User;

import java.util.List;

public interface UserService {
    List<User> userList();
    User findOne(Long id);

    User addUser(User user);
    String deleteUser(Long id);
}

Hibernate 完美地创建了表“user”,但是当我在 Postman 中插入一些值时,例如 POST -> localhost:43441/shipwrecks/add,带有 application/json header 和正文:

{
"id2":1,
"name":"name1",
"description":"desc1"
}

我得到:Hibernate:在控制台中插入沉船(描述,id2,名称)值(?,?,?)。当我手动在 mysql 中插入数据时,一切都很顺利。 GET ->localhost:43563/shipwrecks/list 效果也很好。我在这段代码中犯了错误吗?也许 Spring Boot 版本错误?

最佳答案

需要为Controller中的add方法指定POST方法。我假设您的 User 对象为 null,并且您放入请求正文中的数据不会到达您的服务。

关于mysql - Spring Boot+Hibernate向mysql插入空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49181022/

相关文章:

mysql - 在 MySQL 中使用 sum 得到错误的结果

java - 使用 Spring Data JPA 和 JPA EntityListener 进行字段级加密

java - Spring 为有效 URL 生成 404

hibernate - Spring Data JPA、Hibernate Vendor、 Multi-Tenancy 和 Postgresql

hibernate - 下拉列的 JPA 实体

java - hibernate-entitymanager NoSuchMethodError : org. jboss.logging.Logger.debugf(Ljava/lang/String;I)V

php - CodeIgniter MySQL 查询不工作

mysql - 如果主键相同则替换行

php - 左连接三个 MySQL 表

java - Spring中实现授权