我正在使用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);
}
看起来空值不知从哪里冒出来。我错过了什么?
1条答案
按热度按时间roejwanj1#
您需要检查表的定义。因为您使用
GenerationType.IDENTITY
,所以必须将ID
列定义为 * 标识列 *:如果要防止尝试插入自定义值而不是生成的值,可以改用
GENERATED ALWAYS AS IDENTITY
。