[英]How to insert a row to an existing auto increment table in oracle?
我使用休眠創建了數據庫表,並且我的用戶類具有自動生成的ID,例如follwos。
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_Id")
private int userId;
@Column(name = "username", nullable = false)
private String username;
@Column(name = "password", nullable = false)
private String password;
我試圖從蟾蜍控制台中插入用戶,也將user_id值手動添加。 當我想從應用程序中插入新用戶時,出現如下錯誤,
java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (TDM.SYS_C001668192) violated
我必須使用過程從數據庫中插入一些值,那么如何使用現有序列或ID(無論如何)插入新行?
更新:
我通過@Afridi解決了以下問題。
首先,我向user_id添加了序列注釋
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "t_user_id_seq_generator")
@SequenceGenerator(name = "t_user_id_seq_generator", sequenceName = "t_user_seq")
@Column(name = "user_Id")
private int userId;
之后,我這樣稱呼它;
insert into t_user (user_id, username) values(T_USER_SEQ.nextval, 'newUser');
我檢查了這個SQL;
select * from user_sequences where sequence_name = 'T_USER_SEQ';
Hibernate自動使用@GeneratedValue
填充列標記。 從文檔:
@GeneratedValue批注指定使用標識列,數據庫序列或表生成器自動生成實體標識符值。 Hibernate即使對UUID標識符也支持@GeneratedValue映射。
您可以設置@GeneratedValue
類型。 參見https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#identifiers-generators
這與@GeneratedValue
批注無關。 即使您已使用此注釋對字段進行注釋並提供了自己的ID,它也會使用該ID而不是生成它。
由於@Id
注釋,您遇到此錯誤。 此注釋使您的字段userId
唯一。 這是一個主鍵,因此您不能有重復的條目。
您可以做的是代替調用session.save(entity)
,而可以調用session.update(entity)
或session.saveOrUpdate(entity)
。 如果它不存在,它將保存它,否則將對其進行更新/覆蓋。
Hibernate使用一個序列為@GeneratedValue
字段生成ID,並且Hibernate將緩存從該序列中選擇的一些ID。 因此,當您手動為新行分配ID時,此ID可能會違反緩存的ID。
我通過@Afridi解決了以下問題。
首先,我向user_id添加了序列注釋
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "t_user_id_seq_generator")
@SequenceGenerator(name = "t_user_id_seq_generator", sequenceName = "t_user_seq")
@Column(name = "user_Id")
private int userId;
之后,我這樣稱呼它;
insert into t_user (user_id, username) values(T_USER_SEQ.nextval, 'newUser');
我檢查了這個SQL;
select * from user_sequences where sequence_name = 'T_USER_SEQ';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.