【发布时间】:2012-11-15 16:17:27
【问题描述】:
由于某种原因,当我从应用程序 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);
道法实现:
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 槽 sql 客户端 (pgadmin) 插入它,它可以正常工作,这可以按预期工作:
insert into users (username, password, groupfk) VALUES ('test', 'c20ad4d76fe97759aa27a0c99bff6710',1);
因此,由于某种原因,hibernate 无法正确生成我的 id,事实是,如果上述语句有效,则根本不应该生成它。
我该怎么办?
【问题讨论】:
标签: java hibernate postgresql hibernate-annotations