由于某种原因,当我从应用程序 id 插入数据库时,它始终为 0。这是用于 spring security auth 表用户的表,从 pgadmin II 复制:
id serial NOT NULL,
username character varying(100),
password character varying(200),
groupfk integer,
CONSTRAINT users_pk PRIMARY KEY (id ),
CONSTRAINT users_groupfk_fkey FOREIGN KEY (groupfk)
REFERENCES groups (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
我的用户域类中有以下相关 ID 部分:
@Id
@Column(name = "id", columnDefinition = "serial")
@Generated(GenerationTime.INSERT)
public int getId() {
return id;
}
@ManyToOne
@JoinColumn(name = "groupfk")
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
所以我像这样插入用户:
User user = new User();
user.setPassword(password);
user.setUsername(username);
Group group = new Group();
group.setId(usergroup);
user.setGroup(group);
dao.saveUser(user);
道方法 impl :
public void save(User user) {
Session session = sessionFactory.getCurrentSession();
session.save(user);
}
所以这是我得到的例外:
Could not execute JDBC batch update; SQL [insert into users (groupfk, password, username, id) values (?, ?, ?, ?)]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
真实查询:
Batch entry 0 insert into users (groupfk, password, username, id) values ('1', '098f6bcd4621d373cade4e832627b4f6', 'test3', '0') was aborted. Call getNextException to see the cause.
所以我用 id 插入了以前的用户,0
它成功了。我试图插入另一个,但因为它具有相同的 ID,所以发生了这个错误。
通常,如果我尝试使用 sql trough sql client (pgadmin) 插入它,它可以正常工作,这可以按预期工作:
insert into users (username, password, groupfk) VALUES ('test', 'c20ad4d76fe97759aa27a0c99bff6710',1);
因此,由于某种原因,hibernate 无法适当地生成我的 id,事实是,如果上述语句有效,则根本不应该生成它。
我该怎么办?