SORU
25 Kasım 2010, PERŞEMBE


Floş doğru kullanımı() JPA/Hazırda bekleme

Flush hakkında bilgi topluyordum() tam olarak ne zaman kullanılır anlamış değilim ve bunu doğru kullanmak için nasıl yöntem ama. Okuduğum kadarıyla benim anlayış kalıcılık bağlamı içeriğini veritabanı ile senkronize olacak. e. çarpıcı ifadeler ya da ferahlatıcı bir varlık veri verme.

Şimdi iki varlık A B (veya JPA tarafından zorunlu modellenmiş değil bire bir ilişki içinde, ama) ile aşağıdaki senaryo var. A manuel olarak ayarlanan kompozit bir PK vardır, ve aynı zamanda otomatik oluşturulan KİMLİK alan recordId var. recordId A yabancı anahtar olarak varlık B yazılmalıdır. Tek bir işlemle A B kurtarıyorum. Sorun otomatik oluşturulan değer A.recordId A em.persist() çağrıldıktan sonra em.flush() açık çağrı yapıyorum sürece işlem içinde kullanılamaz. (Otomatik olarak oluşturulan KİMLİK PK sonra, var ise değer doğrudan varlık içinde güncellenen, ama burada öyle bir durum yok.)

em.flush() bir hareketin içinde kullanırken herhangi bir zarar verir mi?

CEVAP
25 Kasım 2010, PERŞEMBE


Muhtemelen em.flush() tam detayları uygulanmasına bağlı. Genel her neyse, Hazırda Beklet gibi JPA sağlayıcı, aslında hareketi tamamlamak kadar veritabanına göndermek için gereken SQL talimatları önbellek, sık sık. Örneğin, bir veritabanı EKLEME yapmak zorunda hatırlıyor, ama aslında hareketi tamamlamak kadar talimatları yürütmüyor Hazırda bekleme em.persist(), Ara. Afaık, bu esas olarak, performansı artırmak için yapılır.

Bazı durumlarda zaten SQL talimatları derhal idam edilmesini mi istiyorsun; bazı yan etkileri sonucu, otomatik anahtarı ihtiyacınız olduğunda, genellikle, ya da bir veritabanı tetikler.

em.flush() ne iç SQL talimatları önbelleği boşaltın ve hemen veritabanına yürütmek için.

Zarar yok, sadece iyi bir zamanlama ile ilgili olarak JPA sağlayıcı kararlar veritabanı SQL talimatları göndermek için geçersiz olduğundan (küçük) bir performans isabet olabilir. sonuç:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FUzzyBUnnyBOoties

    FUzzyBUnnyBO

    3 EKİM 2007
  • hytchme

    hytchme

    9 Mart 2014
  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006