【发布时间】:2016-12-29 21:31:58
【问题描述】:
我使用 hibernate 的 hbm2ddl 自动生成架构。这是我的域名:
@Entity
public class Reader {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
Long id;
@Column(nullable=false,unique=true)
String name;
@Enumerated(EnumType.STRING)
Gender gender;
int age;
Date registeredDate = new Date();
// getter and setter ...
}
当我使用休眠来保存 reader 时,它可以正常工作,因为它会为 reader 生成一个 id。但是当我使用jdbcTemplate用纯SQL插入一条记录时,却报错:
org.springframework.dao.DataIntegrityViolationException: StatementCallback;
SQL [insert into reader(name,gender,age) values('Lily','FEMALE',21)];
NULL not allowed for column "ID";
SQL statement:insert into reader(name,gender,age) values('Lily','FEMALE',21) [23502-192];
nested exception is org.h2.jdbc.JdbcSQLException: NULL not allowed for column "ID";
SQL statement: insert into reader(name,gender,age) values('Lily','FEMALE',21) [23502-192]
如何解决?
- 我调试发现生成的hb2ddl的DDL是
create table Book (id bigint not null, author varchar(255), name varchar(255), price double not null, type varchar(255), primary key (id))。似乎休眠模式以自己的方式处理 id 策略,但如何? -
@GeneratedValue(strategy=GenerationType.AUTO)应该在 DDL 的语句中生成auto increment,但我没有找到。我错过了吗?
【问题讨论】: