2010-09-27 5 views
89

Bir alan insertable=false, updatable=false açıklamalıysa, değer ekleyemez veya varolan değeri değiştiremezsiniz anlamına gelmez mi? Bunu neden yapmak istersiniz?Lütfen açıklayın: insertable = false, updatable = false

@Entity 
public class Person { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @OneToMany(mappedBy="person", cascade=CascadeType.ALL) 
    private List<Address> addresses; 
} 

@Entity 
public class Address { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name="ADDRESS_FK") 
    @Column(insertable=false, updatable=false) 
    private Person person; 
} 

cevap

75

Sen yapacağını/oluştururken, söz konusu ilgili varlığı güncelleme sorumluluk akım varlık değilken. Örneğin. Person ve bir Address var. Person oluşturmak veya güncellemek için Address öğesinin Address varlığındaki Person öğesiyle @OneToMany ilişkisine insertable=false, updatable=false ilişkisini eklemek istersiniz. Diğer yol yuvarlak. Eğer bir varlık içinde bir kereden bir saha daha haritasına gerektiğinde insertable=false, updatable=false tanımlanması

+0

halledeyim istiyorum "created_on" sütun üzerinde olacağını . – BalusC

+0

Kişi üzerinde updatable = false ile, adres güncellenirken Person.name güncellemesini devre dışı bırakacağını söylüyorsunuz (bu, kaskatın amacı olduğu için katılmıyorum). Ayrıca @Column tanımı yabancı anahtar (Kişi) ve yabancı anahtar olmadığı zaman (güncelleme devre dışı bırakmak için başvurulan varlık yok) bir şey farklı olduğunu söylüyoruz. Güncellenebilir javadoc okuyarak, bir kez devam ederse, verilen Adres için Kişiyi değiştirmek için sadece devre dışı bırakacağını söyleyebilirim. Açıklayabilir misiniz lütfen? – Flowy

+1

Sanırım, '... ile @ManyToOne ilişkisine ... demek istediniz? –

65

tipik yararlıdır:

Bu IMO semantik bir şey değil, kesinlikle teknik olanıdır.

+5

Bu cevabın kabul edilene göre daha iyi olduğuna kesinlikle inanıyorum. Kabul edilen cevap, yüklenebilir/güncellenebilir niteliğin, ilgili varlığın yaratılması/güncellenmesi ile ilgili olduğu duygusunu aktarırken, bu niteliklerin ardındaki asıl niyet, mevcut varlığın sütununun eklenmesini/güncellenmesini önlemektir. İlgili varlığın oluşturulması/güncellenmesi, haritalama notunun kaskad niteliğiyle ele alınır. – Jayant

15

Ben BalusC ve Pascal Thiventinsertable=false, updatable=false başka yaygın kullanımı hakkındaki yanıtlara eklemek istiyorum:

bir id ama sıra numarası çeşit olmayan bir sütun düşünün. Sıra numarasının hesaplanması sorumluluğu mutlaka uygulamaya ait olmayabilir. Örneğin, sıra numarası 1000 ile başlar ve her yeni varlık için bir sayı artırılmalıdır. Bu, kolayca ve çok uygun bir şekilde, veritabanında ve bu gibi durumlarda bu konfigürasyonlar mantıklıdır.

+0

dizileri de JPA tarafından desteklenir, böylece dizinizi de JPA ek açıklamaları ile tanımlayabilirsiniz. – eis

1

bir diğer örnek, veritabanı tarih oluşturma Bu ilişkinin iki tarafın birinde `sokulabilir = false, güncellenebilir = FALSE tanımlayan ifade eder

+0

Hazırda bekletme güncellemesine dayalı güncellemeleri engellemek için Hazırda bekletiliyor mu? JPA veri havuzum testinde, bu ek açıklama içeren bir create_on sütunu, şikayetler olmadan güncellemeleri kabul eder. – chrisinmtown