JPA Hazırda - birincil anahtar kısıtlaması ihlali özel (Dizi)

oy
1

Benim uygulamada hazırda JPA kullanın. Bir Primer anahtarı (Dizi) sahip bir Tablo vardır. Servis o tabloya kayıt ekler.

Versiyon: Oracle 12c

Lehçesi: org.hibernate.dialect.Oracle10gDialect

Konu :

Biz yük testi sırasında sorun (SIRA Key Benzersiz kısıtlama ihlali) karşılaşmaktadır.

Sorular:

  1. Bu sorun her zaman meydana gelmiyor. Ama sadece yük testi sırasında. Birisi kontrol ve iplik güvenli jeneratör kullanmak yardımcı olur musunuz?

  2. o DB tarafı dizisi tanım sorunu veya Java tarafında mı?

DB Sıra:

CREATE SEQUENCE MY_SEQ    
START WITH 1
INCREMENT BY 1
NOMINVALUE
NOMAXVALUE
CACHE 30
NOORDER;

CREATE TABLE MY_TABLE    (  
    MY_PRIMARY_KEY INT default MY_SEQ.nextval NOT NULL,
    VALUE_COL VARCHAR2(10) NULL       
);

Varlık:

public class MyTableEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = MY_PRIMARY_KEY)
    @GenericGenerator(
        name = mySequenceGenerator,
        strategy = org.hibernate.id.enhanced.SequenceStyleGenerator,
        parameters = {
                @Parameter(name = sequence_name, value = SEQUENCE MY_SEQ),
                @Parameter(name = increment_size, value = 1)
        }
    )
    @GeneratedValue(generator = mySequenceGenerator)
    private long myPrimaryKey;

    @Column(name = VALUE)
    private String value;

}
Oluştur 27/11/2018 saat 18:16
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Oracle 10 Lehçesi

For Oracle10gDialect bu yapılandırmayı kullanmak

@Id
@Column(name = "MY_PRIMARY_KEY")
@GeneratedValue(strategy=GenerationType.AUTO)
Long myPrimaryKey;

Hazırda bir tablo ve bir dizi oluşturur:

create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) not null, 
VALUE varchar2(255 char), 
primary key (MY_PRIMARY_KEY))

create sequence hibernate_sequence 

Saklama sırasında ilk yeni sekans kimliği alır ve daha olarak geçirir INSERTtablosunda

select hibernate_sequence.nextval from dual
insert into MY_TABLE (VALUE, MY_PRIMARY_KEY) values (?, ?)

Oracle 12 Lehçesi

Eğer kullanırsanız Oracle 12 doğal destekler IDENTITY columno yükseltmek için tercih edilir Oracle12cDialect (bu 5.3 Hibernate gerektirdiğini unutmayın)

Set strategyiçinGenerationType.IDENTITY

@Id
@Column(name = "MY_PRIMARY_KEY", updatable = false, nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long myPrimaryKey;

Aşağıdaki tablo oluşturulur - önemli bir parçasıdır generated as identityeşsiz velues sağlayan. Hiçbir ettiği açık unutmayın sequencedahili olarak yönetilen, oluşturulacak gereklidir.

create table MY_TABLE (
MY_PRIMARY_KEY number(19,0) generated as identity, 
VALUE varchar2(255 char), 
primary key (MY_PRIMARY_KEY))

Saklarken kimliği yok INSERT geçirilir , bu Oracle tarafından atanır ve oturumdan döndürülür

insert into MY_TABLE (VALUE) values (?) RETURNING MY_PRIMARY_KEY INTO ? 

Oracle 10 aksine veritabanına bir yuvarlak gezi kurtarmak unutmayın.

Cevap 25/12/2018 saat 12:06
kaynak kullanıcı

oy
0

Uzun uzun değiştirin

Uzun kullanırsanız, o (varsayılan olarak) 0. Çünkü hiçbir jeneratör mevcut değerlerini değiştirmek için izin verilir!

https://docs.oracle.com/javaee/7/api/javax/persistence/GeneratedValue.html

Cevap 28/11/2018 saat 14:39
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more