2013-03-08 32 views
6

Varolan bir uygulamayı dosyadan veritabanı depolama alanına dönüştürmek için Android için Ormlite kullanıyorum. Veritabanına girmem gereken oldukça karmaşık bir nesne veri yapısına sahibim ve başlangıçta en azından bunu gerçekleştirmek için çok fazla nesne yapısını değiştirmek istemiyorum. Bu mevcut yapıda, birkaç tane iç içe yabancı cisim var.Neden foreignAutoDelete yok?

Benim sorum, foreignAutoCreate otomatik olarak gayet iyi çalışıyor gibi görünüyor. Veritabanında yabancı nesneler olan bir nesne oluşturduğumda, kendisinin de dört veya beş seviyesine kadar yabancı nesneler, vs. vardır, ana içerikli nesne için oluşturulan tek bir nesne tüm yabancı nesneleri tüm bu seviyelere indirir.

Ana nesneyi silmenin bir yolu olduğuna inanıyorum ve içerilen tüm yabancı nesneler düzeylerini silmeleri için ormlite kaskatı var. Bir şeyi kaçırmadığımı ve yaptığım şey için daha kolay bir çözüm olmadığını doğrulamak istiyorum. Bu, ana tablodaki bir silme işlemi üzerine her şeyi silmek için tetikleyiciler kullanıyor. Çalıştığımı anlayamasam da kaskad silmelerin bir seçenek olduğunu anlıyorum. Ama işe yaramasa bile, hala bir veritabanı dışı konfigürasyonun yokluğunu merak ediyorum, çünkü veritabanındaki konfigürasyonun bir kısmının olması ve bazılarının ormlite sonunda problemlere yol açabileceğine benziyor.

Şu anda tüm bu yabancı nesneler düzeyindeki bir güncelleştirme seçeneğini tamamlarken sorun yaşıyorum. Başlangıçta ana nesneyi yaratıyordum ve tüm çocukları yaratabiliyordum. Ana nesneyi güncellemeyi veya ana nesneyi silmeyi ve sonra okumayı deneyebilirim, ancak çocukları etkilemiyor gibi görünüyorlardı (güncelleştirilmiyorlardı). Basamaklı silmeleri ekledikten sonra, ana nesneyi silmenin ve çocuklarının üzerinden geçmenin ve sonra ana nesneyi okumanın "güncelleme" yi gerçekleştireceğini varsayardım, ancak şu anda ana nesneyi okuduğumda çocuklar tekrar eklenmiyor. Ana nesneyi ekledikten sonra gerçekleşen çocuk tablolarındaki silme tetikleyicileriyle ilgili bir zamanlama/işlem sorunu olduğunu düşünüyorum. ForeignAutoCreate tüm alt nesneler için açık kalır, bu yüzden her şey veritabanından temizlendikten sonra ana nesnenin ikinci oluşturulmasında doldurulması gerektiği varsayılır.

Sorunun cevabı mantıklı ve herhangi bir cevap için şimdiden teşekkürler.

+0

neden böyle uzun bir soru olarak tanımlanır? Gerçekten neye ihtiyacın olduğunu anlamak 15 dakika sürdü. Bence RobCroll bir çözüm verdi, böylece bir tane vermem gerekmiyor –

cevap

7

Çocuğun yabancı anahtar DatabaseField bildirimi için bir columnDefinition parametresi ekleyin. Bu örnekte belge ebeveyntir. DocumentEntity, sınıfın adıdır, ancak tablo adı "belge"

@DatabaseField(canBeNull = false, foreign = true, index = true, foreignAutoRefresh = true, columnDefinition = "integer references document(id) on delete cascade") 
private DocumentEntity document;