2015-06-30 19 views
17

ActiveAndroid'te soyut bir sınıf için bir tablo oluşturmanın mümkün olup olmadığını bilen var mı? Mesela iki somut sınıfı olan Dog ve Cat ile bir soyut sınıf Hayvana sahip olabilirdim. Ben böyle bir şey yapmak mümkün istiyorum: 'hayvanlar' kaydedildi Kediler ve Köpekler tümünü içeren neden olacaktır ActiveAndroid soyut sınıf tablosu

List<Animal> animals = new Select().from(Animals.class).execute(); 

. Ya da: 'hayvan' Bir Kedi veya Köpek ya olabilir

Animal animal = new Select().from(Animals.class).where("name = ?", name).executeSingle(); 

. Maalesef bunu yaptığımda bir istisna alıyorum çünkü soyut sınıf Hayvan için hiçbir tablo oluşturulmuyor. ActiveAndroid'i kullanarak bunun nasıl gidebileceğimi bilen var mı?

+1

Soyutlama yerine bir temel sınıf kullanamaz mısınız? –

+0

Niçin böyle yapmak istediğini anladığımdan emin değilim? Bir Soyut sınıfının tüm amacı, “Cat” veya “Dog” gibi çocuk sınıflarını kullanmanızdır. Bir “Hayvan Hayvanı” nesnesini nasıl oluşturduğunuzu unutmayın, Java'da yapılamaz, ancak elinizdeki listenin tamamı yapılabilir, ancak nesne ile çalışmaya başlamadan önce uygun alt sınıfa yazmanız gerekir. –

+0

Yukarıdaki örnekte soyut bir 'Hayvan' oluşturmayacağım. ActiveAndroid'in, orijinal olarak kaydedildiğinde nesnenin türüne bağlı olarak bir Kedi veya Köpek oluşturmasını isterim. – user3265561

cevap

1

Ne yazık ki ActiveAndroid, modellerin bu şekilde kalıtımını henüz desteklemiyor (https://github.com/pardom/ActiveAndroid/issues/14, https://github.com/pardom/ActiveAndroid/issues/257).

Burada ActiveAndroid değiştirmek istiyorsa bunu yapabilirsiniz budur:

  • sen değil kalıcıdır şey (com.activeandroid.annotation.Table bakınız) gibi bir modeli (Animals) tanımlamak açılamanın çeşit oluşturun.
  • Bu sınıf için sorgular yürütmeye çalıştıktan sonra, çocuk sınıflarını belirlemek için yansımayı kullanabilir ve daha sonra, çocuk sorgusu başına bu sorguyu gerçekleştirmesini sağlayabilirsiniz. O zaman temel olarak her bir sorgu için sonuç listesini alırsınız ve bunları tek bir listeye birleştirirsiniz.

Dürüst olmak gerekirse, herhangi bir Android ORM kitaplığında hiçbir zaman miras görmedim ve kişisel olarak modellerin iyi bir desen olduğunu düşünmüyorum. Bu yolda ilerlemek için gerekçenizi tekrar gözden geçirmek isteyebilirsiniz.

+0

Model derslerimi sürdürürken mirastan ne önerirsiniz? Farklı 'iş' tipleri olabilecek 'işleri' kaydedebilmek istiyorum. İş türü başına ayrı bir tabloya sahip olmaktan ve işin türünü ve yabancı anahtarın bu iş türü için doğru tabloya kaydedilen bir 'ana' tabloya sahip olmaktan daha iyi olur muyuz? – user3265561

+1

@ user3265561 Yapacağım şey, iş modelini çok genel bir şekilde oluşturmak. Sütunlar, JobType ve tüm işlerin ortak özellikleri ne olursa olsun. Ayrıca, başka herhangi bir işe özgü özellikten seri hale getirilmiş bir JSONObject içeren bir String olan bir EkProperties sütununa sahip olur. – nyx

+0

Bu şekilde, db'ye kaydedilecek genel bir 'Job' olabilir, sonra her bir alt sınıf 'RealJob', seri hale getirildiğinde bu nesneyi yeniden oluşturmak için gereken jsonu döndüren bir "serializeAdditionalProperties()" işlevini geçersiz kılabilirdi gelecekte. – user3265561

İlgili konular