2011-01-01 21 views
12
<property name="hibernate.hbm2ddl.auto">update</property> 

benim veritabanı şemasını oluşturabilir, otomatik vs ... anahtar Ama ne veritabanı şeması GÜNCELLEME ilgili özellikleri, kısıtlamayı eklemek? Bazı öğeleri varlıklarımdan kaldırırsam, hazırda bekletme onu kaldırmaz veya bazı kısıtlamaları değiştirirsem, hazırda bekletme zaten oluşturulmuş kısıtlamaya değmez ...Güncelleme veritabanı şeması

Hazırda bekletme modunu gerçekten güncelleştirmenin bir yolu var. veritabanı şeması?

Teşekkürler.

cevap

6

Gerekli olan veritabanı sütunları ve tablolarını oluşturan ve bu düşüşleri veritabanı güncellemeleri için oluşturulan SQL'e ekleyen bir araç oluşturduk. Ancak, çalışmasını sağlamak için SchemaUpdate nesnesine bazı ekstralar eklememiz gerekiyordu:

  • Sıfır olmayan özellikler için çekler eklememiz gerekti. Bu, mümkün olan yerlerde sıfır değerleri ortadan kaldırmak için veriler üzerinde bir UPDATE bildirimi yayınlamayı ve bir sonraki varsayılan değer noktasına gitmeyi içerir.
  • Varsayılan sütun değerleri için çekler eklememiz gerekti. Varsayılanlar, bir sütunun ve veri türü null yapısına göre belirlenir. Primitifler her zaman sıfıra veya false değerine sıfırlanır, null olmayan enum değerleri ilk enum değerine, ancak diğer nesneler için betiğin el ile değiştirilmesi gerekir.
  • Veritabanı sütun uzunluğunun ve @Column(length)'un farklı olduğu durumlar olduğu için, varchar sütunlarını yeniden boyutlandırmak için destek bile ekledik.

Ama hepsini bir araya getirmek için tam bir araç bu şekilde oluşturulamaz, çünkü bir sütun kodda yeniden adlandırılırsa ne olur? Ne tür otomatik olarak dönüştürülemez bir şekilde değişirse (bugüne kadar bool?). Refactoring geçmişine erişiminiz yoksa, değişiklikleri her zaman yaymazsınız.

3

Hayır yok. hbm2ddl, şema geçişlerinizin tam bir yönetimini yapmak için tasarlanmamıştır. Bunu yalnızca şemanıza ek değişiklikler yapmak için kullanırsanız ve başka bir şey için elden düzenleme (oluşturulan komut dosyaları) kullanmanız en iyisidir.

1

hazırda bir veritabanı şeması

Old post ile hazırda eşleştirmeleri bir dizi senkronize, ama iyi olup olmadığını topluluk Şu anda ile liquibase kullanmak :)

5

bildirmek yapabiliyor SchemaUpdate denilen bir sınıf sağlar Bir veritabanında otomatik veritabanı değişiklikleri yapmak agnostic yol. Hazırda bekletme notlarından doğrudan sıvı baza komutları çıkartmak mümkün olabilir, ancak böyle bir aracın olduğunu düşünmüyorum, bu yüzden muhtemelen bunu kendiniz yapmanız gerekecektir.

+0

Ne demek, liquibase veritabanı agnostik demek? Başka bir RDBMS'de (yani veritabanı programı) bir RDBMS'de oluşturulan bir lıbibase changeet'i çalıştırmayı denedim ve çalışmadı. – Fletch

+2

Fletch - Yıllarca kullandım ve db agnostik ama eğer kodunuzu belirli bir db'ye sabitlerseniz o zaman olmayacaktır. gibi xml düğümlerini kullanmayı deneyin ... o zaman sizin için tercüme edecektir. – csharp4me

2

şema değişiklikleri yönetmek için yararlı olabilir Bazı projelerde: SOW etiketli

Yararlı bulabileceğiniz başka bir kaynak, Flyway web sitesinde (feature comparison) Burada belirtilen diğer ilgili projelerdir.

İlgili konular