何らかの理由で、アプリケーション ID からデータベースに挿入すると、常に 0 になります。これは、pgadmin II からコピーされた、Spring セキュリティ認証テーブル ユーザーに使用されるテーブルです。
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);
Dao メソッド 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.
そのため、以前のユーザーを id0
で挿入したところ、成功しました。そして、別のものを挿入しようとしましたが、同じIDを持っていたため、このエラーが発生しました。
通常、SQLトラフSQLクライアント(pgadmin)で挿入しようとすると、機能します。これは期待どおりに機能します:
insert into users (username, password, groupfk) VALUES ('test', 'c20ad4d76fe97759aa27a0c99bff6710',1);
したがって、何らかの理由で休止状態が適切にIDを生成しません。真実は、上記のステートメントが機能している場合、それをまったく生成すべきではないということです。
私は何をしますか?