2013-03-12 8 views
6

Problem gelöst! - Ich habe meine Lösung ganz unten hinzugefügt.Viele-zu-Viele Kompilierfehler mit greendao für Android

Ich habe was eine Frage ist eine ziemlich einfache Frage, aber ich kann nicht scheinen, die Antwort in der Dokumentation zu finden.

Ich versuche, eine Viele-zu-Viele-Beziehung mit greendao für Android zu modellieren, aber ich bekomme einen Kompilierfehler im Hauptprojekt, nachdem ich das Generatorprojekt ausgeführt habe.

Mein Code, die Beziehungen und Organisationen gibt:

Entity customer = schema.addEntity("Customer"); 
    customer.addIdProperty(); 
    customer.addStringProperty("firstName").notNull(); 
    customer.addStringProperty("lastName").notNull(); 
    customer.addDateProperty("birthDate"); 
    customer.addStringProperty("phoneNumber"); 
    customer.addStringProperty("address"); 
    customer.addStringProperty("email"); 


    // Product 
    Entity product= schema.addEntity("Product"); 
    product.addIdProperty(); 
    product.addIntProperty("colour").notNull(); 
    product.addIntProperty("weight").notNull(); 

    // CustomerProduct 
    Entity customerProduct = schema.addEntity("CustomerProduct"); 
    customerProduct.addIdProperty(); 

    Property customerId = customerProduct.addLongProperty("customerId").notNull().getProperty(); 
    customer.addToOne(customerProduct , customerId); 
    ToMany customerProductToCustomers = customerProduct.addToMany(customer, customerId); 
    customerProductToCustomers.setName("customers");   

    Property productId = customerProduct.addLongProperty("productId").notNull().getProperty(); 
    product.addToOne(customerProduct , productId); 
    ToMany customerProductToProducts = customerProduct.addToMany(product, productId); 
    customerProductToProducts.setName("products"); 

    customerProduct.addStringProperty("something"); 

Die Fehler: In Customer.java: customerId eine Variablen In Product.java nicht gelöst werden kann: productId kann nicht zu einer Variablen aufgelöst werden

Bitte helfen, Danke.

Edit:

Hier ein Auszug mit dem Problem Code aus Customer.java (automatisch generiert):

/** zu-Eins-Beziehung auf den ersten Zugang aufgelöst. */

public CustomerProduct getCustomerProduct() { 
    if (customerProduct__resolvedKey == null || !customerProduct__resolvedKey.equals(customerId)) { 
     if (daoSession == null) { 
      throw new DaoException("Entity is detached from DAO context"); 
     } 
     CustomerProductDao targetDao = daoSession.getCustomerProductDao(); 
     customerProduct = targetDao.load(customerId); 
     customerProduct__resolvedKey = customerId; 
    } 
    return customerProduct ; 
} 

public void setCustomerProduct(CustomerProduct customerProduct) { 
    if (customerProduct == null) { 
     throw new DaoException("To-one property 'customerId' has not-null constraint; cannot set to-one to null"); 
    } 
    this.customerProduct = customerProduct; 
    customerId= customerProduct.getId(); 
    customerProduct__resolvedKey = customerId; 
} 

Problem: Diese generierten Code versucht customerId, aber customerId existiert nicht als eines der Mitglieder der Klasse zu verweisen:

public class Kunde {

private Long id; 
/** Not-null value. */ 
private String firstName; 
/** Not-null value. */ 
private String lastName; 
private java.util.Date birthDate; 
private String phoneNumber; 
private String address; 
private String email; 

/** Used to resolve relations */ 
private transient DaoSession daoSession; 

/** Used for active entity operations. */ 
private transient CustomerDao myDao; 

private CustomerProduct customerProduct; 
private Long customerProduct__resolvedKey; 

Lösung:

Also was ich versuchte, die ganze Zeit zu tun, war Modell eine Viele-zu-Viele-Beziehung. Was ich tat: Kunde (M: 1) CustomerProduct (1: M) Produkt

jedoch, was ich getan haben sollte: Kunden (1: M) CustomerProduct (M: 1) Produkt

+0

Bitte zeigen Sie den Code, der die Fehler verursacht. –

+0

Ich habe den Code hinzugefügt, der den Kompilierfehler verursacht – user2031401

+0

Ist dieser Code Ihre Lösung? Hattest du irgendwelche Fortschritte, die hier nicht veröffentlicht wurden? – MatheusJardimB

Antwort

0

ändern customerId= customerProduct.getId(); bis int customerId= customerProduct.getId();. oder noch besser, tun Sie einfach customerProduct__resolvedKey = customerProduct.getId(); unter der Annahme, dass customerProduct__resolvedKey korrekt deklariert ist.

+0

Dies scheint so zu sein, als würde es in der Funktion setCustomerProduct funktionieren, jedoch bin ich nicht sicher, ob derselbe Ansatz für die Funktion getCustomerProduct() funktionieren wird. Ich denke, dass es hier vielleicht größere Probleme geben könnte, möglicherweise mit der Art, wie ich meine Viele-zu-Viele-Entity-Beziehungen definiere. .. da dieser Code automatisch generiert wird ..? – user2031401

+0

@user Ich habe greendoo noch nie benutzt, daher bin ich mir nicht sicher, wie Java-Code generiert wird. Ich habe einfach auf der Grundlage der Compilerfehler geantwortet. Ich schlage vor, dass Sie ein kleines Beispiel erstellen, das das Problem neu erstellt und den Code, den Sie geschrieben haben, postet, nicht den generierten Code. –

+0

Danke für Ihre Eingabe. Das erste Codebeispiel ist der Code, den ich geschrieben habe, er kompiliert und läuft gut. Durch Ausführen dieses Codeabschnitts (Experte) sollten automatisch Entitäten und ihre entsprechenden Beziehungen generiert werden.Allerdings hat der automatisch generierte Code einen Kompilierungsfehler. – user2031401