Java 如何在oracle中向现有的自动增量表插入行?

Java 如何在oracle中向现有的自动增量表插入行?,java,sql,oracle,hibernate,hibernate-annotations,Java,Sql,Oracle,Hibernate,Hibernate Annotations,我用hibernate创建了我的db表,我的用户类有一个自动生成的id,如followOS @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "user_Id") private int userId; @Column(name = "username", nullable = false) private String username; @Colum

我用hibernate创建了我的db表,我的用户类有一个自动生成的id,如followOS

    @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;
我试图从toad控制台插入一个用户,同时我手动添加用户id值。当我想从我的应用程序中插入一个新用户时,我得到一个错误,如下所示:

java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (TDM.SYS_C001668192) violated
我必须用一个过程从数据库中插入一些值,那么如何使用现有的序列或id(无论什么)插入新行呢

更新:


我通过@Afridi解决了这个问题,如下所示

首先,我在用户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;
@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');
insert into t_user (user_id, username) values(T_USER_SEQ.nextval, 'newUser');
我在这个sql中检查了它

select * from user_sequences where sequence_name = 'T_USER_SEQ';
select * from user_sequences where sequence_name = 'T_USER_SEQ';

Hibernate会自动用
@GeneratedValue
填充列标记。从文件:

@GeneratedValue注释指定实体标识符 值是使用标识列(数据库)自动生成的 序列或表生成器。Hibernate支持@GeneratedValue 甚至映射UUID标识符


您可以设置
@GeneratedValue
的类型。请参见这与
@GeneratedValue
注释无关。即使您已使用此注释对字段进行了注释,并提供了自己的id,它也将使用该id而不是生成它

您收到此错误是因为
@Id
注释。此注释使您的字段
userId
唯一。它是一个主键,因此您不能有重复的条目


您可以不调用
session.save(entity)
而调用
session.update(entity)
session.saveOrUpdate(entity)
。如果它不存在,它将保存它,否则将更新/覆盖它。

Hibernate使用序列为
@GeneratedValue
字段生成ID,Hibernate将缓存从该序列中选择的一些ID。因此,当您手动为新行分配id时,此id可能会违反缓存的id。

我通过@Afridi解决了此问题,如下所示

首先,我在用户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;
@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');
insert into t_user (user_id, username) values(T_USER_SEQ.nextval, 'newUser');
我在这个sql中检查了它

select * from user_sequences where sequence_name = 'T_USER_SEQ';
select * from user_sequences where sequence_name = 'T_USER_SEQ';

使用以下命令:@Id@GeneratedValue(strategy=GenerationType.AUTO,generator=“my_entity_seq_gen”)@SequenceGenerator(name=“my_entity_seq_gen”,sequenceName=“my_entity_seq”)私有长Id;我现在可以访问已经存在的值吗?你是对的,但我没有尝试更新某些内容,我正在尝试使用JDBC将一些值从另一个数据库移动到我自己的数据库,但我当前的值是通过一个过程创建的。我的申请没有。因此,重复ID会出现一些问题。知道了?