[英]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.