2013-02-15 14 views
8

:JPA eşlemede ilkel tip. Veritabanı sütunu NULL olabilir? JPA (JPA 1.0 ve Hibernate kullanarak) ile eşleştirilmiş bu sınıf Verilen

@Entity 
public class Foo { 

    private int bar; 

    /* ... */ 
} 
  1. Ben NULL olarak ayarlanır BAR sütunu olan bir kayıt yüklemeye çalışırsanız ne olur?
  2. İlgili sütun NULL olduğunda bar alanının nasıl ayarlanacağını belirtebilir miyim?

Notlar

Bunun en iyi yöntem olmadığını biliyorum. sorusu meraktan daha olduğunu ve bu durumdan esinlenerek:

  • veritabanı tablosu bir evreleme tablodur: Bir NOT NULL kısıtlama ekleme pratik değildir. Hatalı veri bekleniyor ve kodumun noktası, verileri "gerçek" veritabanına yüklemeden önce doğrulamak, temizlemek ve/veya reddetmektir.
  • Bazı alanlar için kabul edilebilir varsayılan değerler var. Örneğin, false için varsayılan boolean bayrak.
+3

Eğer db sütunu null içerebilirse, değeri göstermek için bir sarıcı sınıfı kullanmalısınız. – Perception

cevap

2
  1. İstisna

2.

@Column(name = “bar”, nullable = false, columnDefinition = “bigint(20) default 0″) 
private int bar; 

o sorunu çözer.

+0

Ama point 2 ile veritabanı sütun tanımını değiştirmem gerekmiyor, değil mi? –

+0

Gerçekten Boş gösterimi istiyorsanız, çubuğu Tamsayı olarak değiştirmelisiniz. Ancak null'dan kaçınmak isterseniz, varsayılan bir değer belirleyebilirsiniz. – Matheus

+0

Bu arada, ilkel türlerin zaten varsayılan bir değere sahip olduğunu düşünüyorum. Ancak null girişleri olan bir sütununuz varsa, Tamsayı değiştirme çubuğu çözümdür. – Matheus

11

Bir sütunun boş değer içermesi durumunda nesneleri kullanmayı tercih ederim, çünkü Matheus'ın fikri yanlış verileri tanıtıyor. NULL <> 0!

+0

Burada yanlış verilerle ne demek istediğini açıklayabilir misiniz? Matheus, varsayılanı 0 olarak ayarlıyor ve nullable = false, bu yüzden asla boş olamaz. Kötü/yanlış verilerle ne demek istiyorsun? – Ankit

+2

'columnDefinition' yalnızca DDL üretimi için * kullanılır * (yani, tablolar oluşturmak ve değiştirmek için ifadeler oluşturmak), böylece varsayılan değer ilkel öğesinin varsayılan değeri olur. Aslında, JPA kullandığınızda varsayılan değerlere sahip sütunlar oluşturmamalısınız. Alanınız ilkel ise, ilkel türün varsayılan değerine varsayılan olur. Alanınız bir nesne ise, veritabanı tablonuzda tanımlandığı gibi varsayılan değeri ayarlayacaktır, ancak eklenen varlık nesnesindeki sütunun karşılığı, varsayılan değeri yansıtacak şekilde güncellenmeyecektir. –