列发生的不工作上的Oracle18c

0

的问题

我有一个表列码和名称,其中我建立使用此类。

@Entity
@Table(name = "xyz")
public class XYZ implements Serializable{
   
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "some_gen")
    @SequenceGenerator(name = "some_gen", sequenceName = "some_seq", allocationSize = 2)
    @Column(name = "id")
    private Long id;

    @Column(name = "name")
    private String name;
    
    //Getter Setter NoArgConstructor AllArgsConstructor


}

现在,当我运行这一点,表以及序列被创建。 验证它从SQL开发。 但是,当我运行以下声明,我收到以下错误。

INSERT IGNORE INTO xyz (name) VALUES ('John');

ORA-01400:无法插入空入("SOME_USER"."XYZ"。"ID")

我访问用户使用。

//This is MyBatis. It will be triggered by REST API
@Mapper
public interface XYZMapper {

    @Insert("INSERT IGNORE INTO xyz (name) VALUES (#{name})")
    public void addNewName(XYZ xyz);
}
java jpa oracle18c spring-boot
2021-11-22 19:38:16
1

最好的答案

1

我不知道Java。

但是,从Oracle的观点,事实上,你所产生的顺序并不意味着Oracle会自动地使用它。 你必须要么直接使用它,比如

insert into xyz (id, name) values (some_seq.nextval, 'John');

或者创建一个数据库,触发这将为你做:

create or replace trigger trg_bi_xyz
  before insert on xyz
  for each row
begin
  :new.id := some_seq.nextval;
end;
/

现在你可以使用 insert 你以前发表于:

INSERT IGNORE INTO xyz (name) VALUES ('John');
2021-11-22 19:55:32

我同意这一解决方案将工作。 谢谢你的分享,但我想,这可以是自动完成的,因为当我使用ID战略作为身份标识,然后一切工作正常,但有序地不工作。
Chetan Krishna

标识列为什么不同;创建一个表用这样的语法(如果Oracle数据库版本支持了(你不会)). 在该背景下,它仍然使用的序列,虽然。
Littlefoot

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................