java H2数据库SQL语句中的ID字段以某种方式分配了NULL值

h6my8fg2  于 2022-11-27  发布在  Java
关注(0)|答案(1)|浏览(131)

我正在使用H2数据库,试图让它接受来自网页的输入,但它一直给我以下错误:

Caused by[m: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "ID"; SQL statement:
insert into BOOK (ID, AUTHOR, GENRE, ILLUSTRATOR, SERIES, TITLE) values (default, ?, ?, ?, ?, ?) [23502-214]

我不知道它从哪里得到这个NULL值。

@Entity
@Table(name = "BOOK")
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

并且DAO设置为给予一个非空值

@Repository
public class DAOImpl implements DAO {

    @Autowired
    private SessionFactory sessionFactory;

    public void saveBook(Book book) {
        book.setId(0L);
        
        Session s = sessionFactory.getCurrentSession();
        s.save(book);
    }

看起来空值不知从哪里冒出来。我错过了什么?

roejwanj

roejwanj1#

您需要检查表的定义。因为您使用GenerationType.IDENTITY,所以必须将ID列定义为 * 标识列 *:

CREATE TABLE BOOK (
    ID BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    .....
);

如果要防止尝试插入自定义值而不是生成的值,可以改用GENERATED ALWAYS AS IDENTITY

相关问题