Java Kalıcılığı / JPA: @Column vs @Basic


119

JPA'da @Columnve @Basicek açıklamalar arasındaki fark nedir ? Birlikte kullanılabilirler mi? Meli birlikte kullanılabilir? Yoksa biri yeterli mi?

Yanıtlar:


147
  • @Basicbir özniteliğin kalıcı olacağını ve standart bir eşlemenin kullanılacağını belirtir. Özniteliğin tembel olarak yüklenip yüklenmeyeceğini ve boş değer atanabilir olup olmadığını belirlemenize izin veren parametrelere sahiptir.

  • @Column özniteliğin kalıcı olacağı veritabanındaki sütunun adını belirlemenize olanak sağlar.

Birini diğeri olmadan belirtirseniz, mantıklı olan varsayılan davranışı elde edersiniz, bu nedenle genellikle insanlar özel durumlar haricinde yalnızca birini kullanır.

Öyleyse, bir özniteliğin tembel bir şekilde yüklenmesini istersek ve bir sütun adı belirtmek istersek diyebiliriz

 @Basic(fetch=FetchType.LAZY)
 @Column(name="WIBBLE")

Varsayılan, tembel olmayan davranışa ihtiyacımız @Columnolsaydı, o zaman sadece yeterli olurdu.


2
Bu açık bir cevap. Teşekkür ederim. Bu yüzden birinin @Basiconsuz kullanabileceğini varsayıyorum @Column, bu yüzden optionalve nullableözellikleri her ikisinde de var. Haklı mıyım
Hosam Aly

1
@ Basic'in nullable ve @ Column's nullable arasındaki farklar ve hiçbirini veya ikisini birden belirtmenin etkisi hakkındaki JPA spesifikasyonunu tam olarak anladığımı iddia etmiyorum. @Basic nullable, şema oluşturmayla ilgili bir "ipucu" olarak tanımlanır. @Column nullable, veritabanındaki sütunun özelliklerini tanımlayan olarak tanımlanır. Uygulamam @Column durumunu kullanmak olacaktır.
djna

16
@Basic (isteğe bağlı), DB'ye kaydetmeden önce kalıcılık sağlayıcı tarafından çalışma zamanında kontrol edilir (yapılmalıdır). @Column, veritabanında bir sütun tanımıdır ve şema oluşturmak için kullanılır: stackoverflow.com/questions/2899073/…
Piotr Gwiazda

2
"tembel olmayan", EAGER diyor. LOL
solvator

7
JPA ek açıklamaları iki gruba ayrılabilir: saf ilişkisel ek açıklamalara karşı uygulama ek açıklamaları. Saf ilişkisel ek açıklamalar şunları içerir: Varlık, Temel, OneToOne, OneToMany, ManyToMany, ... uygulama ek açıklamaları ise saf teorik modelin gerçek bir veritabanına nasıl eşleneceğine dair ipuçları verir: Tablo, Sütun, ... 'İlişkisel varlık özniteliği hakkında bilgi sağlayan bir ek açıklamadır,' Sütun 'ise bir veritabanı sütununa nasıl eşleneceği hakkında bilgi sağlar.
Bruno Ranschaert

50

@ Djna'nın cevabına ek olarak , ve @Basicile karşılaştırılması gerektiğini de belirtmekte fayda var . Herhangi bir mülkte bunlardan yalnızca biri belirtilebilir.@OneToMany@ManyToOne@ManyToMany

@Columnve @JoinColumnveritabanı sütun özelliklerini açıklamak için bunlardan herhangi biri ile birlikte belirtilebilir.

Bunlar, birlikte kullanılabilen iki ek açıklama kümesidir, ancak aynı anda her kümeden yalnızca bir ek açıklama kullanılabilir.


21

Basic'in ilkel alanlar için tasarlandığını belirtmek gerekir.

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes

Temel nitelik, nitelik sınıfının String, Number, Date veya ilkel gibi basit bir tür olduğu bir niteliktir. Temel bir özniteliğin değeri, doğrudan veritabanındaki sütun değeriyle eşleşebilir.

Desteklenen türler ve dönüştürmeler, JPA uygulamasına ve veritabanı platformuna bağlıdır. Doğrudan bir veritabanı türüyle eşleşmeyen bir tür kullanan herhangi bir temel öznitelik, bir ikili veritabanı türüne serileştirilebilir.

JPA'da temel bir özelliği eşlemenin en kolay yolu hiçbir şey yapmamaktır. Başka ek açıklamaları olmayan ve diğer varlıklara referans vermeyen nitelikler, otomatik olarak temel olarak eşlenir ve hatta temel bir tür değilse bile serileştirilir. Öznitelik için sütun adı, öznitelik adıyla aynı şekilde, büyük harf olarak adlandırılır.


İyi not. Teşekkür ederim.
Hosam Aly

1
Hayır, Sütun ek açıklaması belirtilmezse, varsayılan değerler uygulanır (ad, özellik bir olacaktır).
Gab

2

@Basic ek açıklaması JPA varlıklarına uygulanır ve @Column öğesi veritabanı sütunlarına uygulanır. @Basic ek açıklamasının isteğe bağlı özniteliği varlık alanının boş olup olmadığını tanımlar; diğer yandan,

  • @Column annotation'ın nullable özniteliği, karşılık gelen veritabanı sütununun null olup olmadığını belirtir
  • Bir alanın tembel yüklenmesi gerektiğini belirtmek için @Basic kullanabiliriz
  • @Column ek açıklaması, eşlenen veritabanı sütununun adını belirlememizi sağlar
  • @Basic ek açıklama, özelliği Java nesne düzeyinde isteğe bağlı değil olarak işaretler. Ve sütun eşlemesinde (nullable = false), yalnızca NOT NULL veritabanı kısıtlamasının oluşturulmasından sorumludur.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.