Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在简单spring引导crud api上创建用户的问题_Java_Spring_Spring Boot_Spring Rest - Fatal编程技术网

Java 在简单spring引导crud api上创建用户的问题

Java 在简单spring引导crud api上创建用户的问题,java,spring,spring-boot,spring-rest,Java,Spring,Spring Boot,Spring Rest,首次启动api后,前3个用户创建Post请求失败(Post底部的屏幕截图),并出现以下错误(唯一约束位置) 后续的请求可以工作,第一个创建的用户id是4,然后是5,以此类推 如何使用户创建在第一(3)次尝试中起作用 我怀疑这与我的用户预播种有关,我正在使用下面的脚本进行预播种。可能自动ID生成首先尝试1、2、3——它们已经在使用了 插入到用户 值(1,'user1','pass1','ADMIN'); 插入到用户 值(2,'user2','pass2','USER'); 插入到用户 值(3,‘u

首次启动api后,前3个用户创建Post请求失败(Post底部的屏幕截图),并出现以下错误(唯一约束位置)

后续的请求可以工作,第一个创建的用户id是4,然后是5,以此类推

如何使用户创建在第一(3)次尝试中起作用

我怀疑这与我的用户预播种有关,我正在使用下面的脚本进行预播种。可能自动ID生成首先尝试1、2、3——它们已经在使用了

插入到用户
值(1,'user1','pass1','ADMIN');
插入到用户
值(2,'user2','pass2','USER');
插入到用户
值(3,‘user3’、‘pass3’、‘ADMIN’)

无法执行语句;SQL[n/a];上的约束[\”主键 PUBLIC.USER(ID)\“SQL语句:\n插入用户(名称、密码、, 角色,id)值(?,?,?)[23505-196];嵌套异常是 org.hibernate.exception.ConstraintViolationException:无法 执行语句“

  • 编辑-添加角色类

    public enum Role {
    
    USER, ADMIN
    
    }


如果在列定义中使用自动增量,请尝试将策略从
GenerationType.AUTO
更改为
GenerationType.IDENTITY


当我将一个项目从Spring Boot 1.5升级到2.0时,我注意到了一个类似的行为。

只是一个假设。首先,你用sql插入数据,但在你的代码中,你创建了一个新用户并保存到db。因此,这个新创建的id为
1
。但是你的db有一个用户记录,主键是
1
。请删除从数据库中删除所有值,并从rest控制器创建记录

在我看来,像这样使用sequence,不要忘记在db中创建序列

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_generator")
@SequenceGenerator(name="user_generator", sequenceName = "user_seq", allocationSize=50)
或者阅读本文,选择要解决的问题

  • 自动:Hibernate根据使用的 方言
  • 标识:Hibernate依赖于自动递增的数据库列 生成主键
  • 序列:Hibernate从数据库请求主键值 顺序
  • :Hibernate使用数据库表模拟序列
PS:标识应该更相关,但可以尝试其他标识。

您还应该提供列名,以确保其有序。 插入用户(id、名称、密码、角色) 值(1,'user1','pass1','ADMIN')

插入用户(id、名称、密码、角色) 值(2,'user2','pass2','USER')

插入用户(id、名称、密码、角色)
值(3,‘user3’、‘pass3’、‘ADMIN’)

角色类的结构是什么?@benjaminc编辑为包含Source如果表中没有数据,它是否有效?默认策略是
GenerationType.AUTO
@benjaminc。两者都相同。如果在列定义中使用自动增量,请尝试将策略从GenerationType.AUTO更改为GenerationType.Identity
public enum Role {

USER, ADMIN
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_generator")
@SequenceGenerator(name="user_generator", sequenceName = "user_seq", allocationSize=50)