首页 > 解决方案 > 在发布时使用 Spring Boot JPA 在 H2 数据库中插入数据

问题描述

我想使用Spring Boot将注册表单上的数据从我的 Angular 应用程序保存到H2数据库中。JPA但是当我发布到 Spring boot 以保存用户数据时,我NullPointerException在调用 save 方法的线路上得到了一个。当我只返回用户数据而不保存数据时,它工作正常,但在保存数据时却不行。

创建的table那个:

Hibernate: 
    
    create table user (
       id integer not null,
        email varchar(255),
        first_name varchar(255),
        last_name varchar(255),
        password varchar(255),
        primary key (id)
    )

我的entity

@Entity
public class User {

    @javax.persistence.Id
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String firstName;
    private String lastName;
    private String email;
    private String password;
    
    // getters, setters, and constructor, etc.

我的repository

@Repository
@Transactional
public class JPAUserRepository implements UserRepository {

    @Autowired
    private EntityManager em;

    @Override
    @Transactional
    public void save(User user) {
        em.createNativeQuery("INSERT INTO user (id, first_name, email, last_name, password)" +
                "VALUES (?,?,?,?,?)")
                .setParameter(1, user.getId())
                .setParameter(2, user.getFirstName())
                .setParameter(3, user.getEmail())
                .setParameter(4, user.getLastName())
                .setParameter(5, user.getPassword())
                .executeUpdate();
    }

我处理帖子的控制器:

@RestController
public class Register {

private JPAUserRepository jpaUserRepository;

    @PostMapping(path = "/api/register", consumes = "application/json")
    public String addUser(@RequestBody User user) {

        jpaUserRepository.save(user);
        return "succesfull add";
    }

在存储库中,我也尝试过em.persist(user),但这给出了同样的错误。

标签: javaspringspring-boothibernateh2

解决方案


不知道你的错误到底来自哪里。但我注意到:您正在使用提供的 id 插入您的用户,但是它在实体处声明 @Generated - 因此应该生成而不提供 ID。使用 Spring Boot,您通常会拥有这样的存储库:

public interface UserRepository extends CrudRepository<User, Integer> {
}

您不需要任何额外的方法 - 通过调用 userRepository.save(..) 用户将被持久化。我建议查看https://bootify.io并创建一个正在运行的应用程序,这样您就可以检查配置方面缺少的内容。


推荐阅读