postgresql在列“id”中抛出null值违反generationtype.identity的not null约束

ni65a41a  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(446)

我正在尝试为我的实体自动生成id:

public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

我的db表是通过flyway脚本创建的,列id设置为identity

CREATE TABLE USERS (
   ID INT NOT NULL GENERATED BY DEFAULT AS IDENTITY,
   PRIMARY KEY (ID)
};

然后我尝试用我的存储库保存此实体:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {}

这样地:

userRepository.save(user);

但是这会导致一个错误
列“id”中的null值违反了not null约束
仅在连接到p时显示ostgresql:12.2,如果我用h2数据库运行相同的代码,它可以正常工作。
为什么postgresql会失败?

am46iovg

am46iovg1#

以以下方式使用自动生成的ID:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)

你应该使用 SERIAL id列的类型:

CREATE TABLE USERS (
   ID SERIAL PRIMARY KEY,
   PRIMARY KEY (ID)
};

细节:https://www.postgresql.org/docs/8.1/datatype.html#datatype-序列号

ua4mk5z4

ua4mk5z42#

您应该创建序列并将该序列用于id

@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_seq")
    @SequenceGenerator(name = "user_id_seq", sequenceName = "user_id_seq")
    private long id;

您应该在postgresql中创建序列:

CREATE SEQUENCE user_id_seq
INCREMENT 5
START 10;
wbrvyc0a

wbrvyc0a3#

生成用户表
创建表users(id serial not null默认生成为identity,primary key(id)};

相关问题