Java/Spring Boot Web 应用程序。插入具有自动递增 id 列的新行

Posted

技术标签:

【中文标题】Java/Spring Boot Web 应用程序。插入具有自动递增 id 列的新行【英文标题】:Java/SpringBoot Web app. Insert new row with auto-incremented id column 【发布时间】:2020-02-27 07:44:40 【问题描述】:

我正在尝试使用 Web 应用程序上的几行输入将新行存储到 SQL 表中。我的 jsp 有我需要的所有输入行。但是,我需要在不输入新 ID 的情况下存储新对象,因为它是自动递增的。我可以调用我的构造函数来存储除 id 之外的所有内容。 到目前为止,我对该部分的代码是:

 @RequestMapping(value = "/save", method = RequestMethod.POST)
    public ModelAndView save
            //Index connect
            (@RequestParam("id") String id, @RequestParam("type") String animalType,
             @RequestParam("name") String animalName, @RequestParam("age") int animalAge)
        ModelAndView mv = new ModelAndView("redirect:/");
        AnimalConstruct newAnimal;

        newAnimal.setAnimalType(animalType);
        newAnimal.setAnimalName(animalName);
        newAnimal.setAnimalAge(animalAge);
        animals.save(newAnimal);
        mv.addObject("animalList", animals.findAll());
        return mv;

因此,如果我想存储“(id)11, (type)bird, (name)patty, (age)5”,而我只是将类型、名称和年龄设为可输入,我该怎么做身份证?我认为该对象在技术上将 id 注入为空,但随后我得到了一个错误。我对 java 和 Springboot 很陌生,两者的技能都很薄弱。

【问题讨论】:

【参考方案1】:

在 bean 中使用 id 列注释:

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

正如上面@pedrohreis 的回答,您也可以使用GenerationType.AUTO,但前提是您的唯一目的是制作自动增量ID,那么我更喜欢GenerationType.IDENTITY

此外,如果您想禁用对数据的批量更新,那么您应该使用GenerationType.IDENTITY

参考:hibernate-identifiers

【讨论】:

【参考方案2】:

当您希望创建对象时,不应传递 ID。

@RequestMapping(value = "/protected", method = RequestMethod.POST)
public RouteDocument doPost(@RequestBody RouteDocument route) throws ControllerException 
    createNewRoute(route);
    return route;

在前面的例子中,createNewRoute 方法调用了数据库,在我的例子中使用了 spring JpaTemplate 来保存它。对象路由有一个由 JpaTemplate.save 填充的 ID 属性。因此,doPost 返回对象返回您作为参数传递的相同对象,但具有自动分配的 ID。

【讨论】:

【参考方案3】:

魔术发生在 JPA 实现中(例如 Hibernate)。只需将您的 id 字段注释为:

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

保存对象时,id会自动生成并保存。

检查一些类似的问题:Hibernate Auto Increment ID 和 How to auto generate primary key ID properly with Hibernate inserting records

【讨论】:

成功了!谢谢!

以上是关于Java/Spring Boot Web 应用程序。插入具有自动递增 id 列的新行的主要内容,如果未能解决你的问题,请参考以下文章

第三章 Maven构建 Java Spring Boot Web项目

java spring boot返回json的写法

java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Boot Starter的介绍及使用

java spring Boot - 如何渲染一个html页面

带有 Java/Spring Boot 和 Thymeleaf 的 Google Map API 接收坐标但不创建地图

Java spring boot + spring batch:处理大量信息