2013-04-09 16 views
5

Genel olarak Android geliştirmede oldukça yeniyim ve hiç GreenDAO kullanmamıştım. Fakat jeneratör sınıfım üzerinde çok fazla zaman harcadıktan sonra (varlıklarımı modellediğim yer), sonunda GitHub'ta verilen örneğe benzeyen bir şey üretebildim.greenDAO jeneratörü, mantıklı olmayan konsol hatası veriyor

import de.greenrobot.daogenerator.DaoGenerator; 
import de.greenrobot.daogenerator.Entity; 
import de.greenrobot.daogenerator.Property; 
import de.greenrobot.daogenerator.Schema; 
import de.greenrobot.daogenerator.ToMany; 


public class simbalDAOgen { 

public static void main(String[] args) throws Exception { 
    Schema schema = new Schema(1, "com.bkp.simbal"); //Schema(Int version, String package name) 
    addCBTrans(schema); //Add the entities to the schema 
    new DaoGenerator().generateAll(schema, "../Simbal/src-gen", "../Simbal/src-test"); //Generate DAO files 
} 

private static void addCBTrans(Schema schema){ 
    Entity checkbook = schema.addEntity("Checkbook"); 
    checkbook.addIdProperty(); 
    checkbook.addStringProperty("name").notNull(); 
    checkbook.addDateProperty("dateModified"); 
    checkbook.addStringProperty("balance"); // Use a string property because BigDecimal type should be used for currency 

    Entity transaction = schema.addEntity("Transaction"); 
    transaction.setTableName("TRANS"); // "TRANSACTION" is a reserved SQLite keyword 
    transaction.addIdProperty(); 
    transaction.addStringProperty("name"); 
    transaction.addStringProperty("category"); 
    Property transDate = transaction.addDateProperty("date").getProperty(); 
    transaction.addStringProperty("amount"); // Again use string for BigDecimal type 
    transaction.addStringProperty("notes"); 
    Property cbName = transaction.addStringProperty("cb").notNull().getProperty(); //What checkbook the transaction is in 

    ToMany cbToTrans = checkbook.addToMany(transaction, cbName); //Actually ties the transactions to their correct checkbooks 
    cbToTrans.setName("Transactions"); 
    cbToTrans.orderAsc(transDate); 
}  
} 

Sonra greenDAO üzerinde dokümantasyon için yazdığı gibi benim DAO dosyaları oluşturmak için bir java uygulaması olarak kod koştu.

Warning to-one property type does not match target key type: ToMany 'Transactions' from Checkbook to Transaction 

Gerçekten ben dosyaları oluşturulduktan sonra endişe etmesine gerek emin değilim: dosyaları başarıyla üretildi, ancak Eclipse konsolunda bu çizgiyi aldım. Ama anlamadığım şey, kodumda görüldüğü gibi, "çoktan" bir ilişki kullandığımda neden "bire bir" ilişkiden bahsedildiğidir. (Çek defteri varlığında çok sayıda işlem varlıkları olabilir ve işlemleri kontrol etmek için her çek defteri varlığının adını kullanmak istiyorum.)

Geri dönüp kodumun bir kısmını düzeltmem gerekiyor mu? Lütfen herhangi bir şeyi açıklığa kavuşturmam gerekip gerekmediğini sorun ve zaman ayırdığınız için teşekkürler!

+0

Haklısınız, bu oldukça belirsiz bir mesaj. Hem soru hem de cevap için teşekkürler! – BeccaP

cevap

7

GreenDAO tarafından benim için oluşturulan dosyalara baktıktan sonra, sorunumu çözüm buldum. Bana öyle geliyor ki, addToMany() yöntemi, ona geçirilecek bir Long özelliğini bekler ve bir String özelliğini kullanıyordum.

Buna
Property cbName = transaction.addStringProperty("cb").notNull().getProperty(); 

ToMany cbToTrans = checkbook.addToMany(transaction, cbName); 

: sorunumu çözdü

Property checkbookId = transaction.addLongProperty("checkbookId").notNull().getProperty(); 

ToMany cbToTrans = checkbook.addToMany(transaction, checkbookId); 

Yani benim jeneratör kodunda bu iki satır değişti. İşlemleri çek defterine bağlamak için herhangi bir mülk türünü kullanabileceğime dair izlenim vardı, bu yüzden çek defteri adını kullanmayı denedim.

+3

Uzun bir özelliğe ihtiyacı var. GreenDAO (ve herhangi bir çerçeve için hemen hemen her DAO) 1: n ilişkilerini her alt satırdaki bir sütunda ana satırın kimliğini saklayarak çözer. Bu senin mülkiyet kontrol kitabınBu. 1: 1, benzer şekilde çalışır, ancak kimlik, diğer satır için bağlanmış tabloların birine veya her ikisine yerleştirilebilir. String özelliğiyle benzer şekilde çalışan, Android SQLite dbs'de varsayılan olarak etkinleştirilmeyen yabancı anahtar desteği gerektirir. String'i yabancı bir anahtar olarak kullanabilirsiniz, ancak GreenDAO bu ilişkileri otomatik olarak çözme yeteneğinden yoksundur ve Android SQLite bunu zorlamayacaktır. –

0

GreenDao gibi görünüyor sadece yabancı tip olarak uzun kabul ediyor

İlgili konular