2013-03-12 17 views
6

Problem rozwiązany! - Dodałem moje rozwiązanie na dole.Błąd kompilacji wielu-do-wielu za pomocą greendao dla Androida

Mam pytanie, które jest dość proste, ale nie mogę znaleźć odpowiedzi w dokumentacji.

Próbuję modelować relację wiele do wielu za pomocą greendao dla Androida, jednak pojawia się błąd kompilacji w głównym projekcie po uruchomieniu projektu generatora.

mój kod, który określa relacje i podmioty:

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"); 

błędów: W Customer.java: customerId nie mogą być rozwiązane do zmiennej W Product.java: productId nie może być rozwiązany do zmiennej

Proszę o pomoc, dzięki.

Edit:

Oto fragment z kodem problemów z Customer.java (generowane automatycznie):

/** do jednego związku, uchwalonej na pierwszym dostępie. */

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: ten wygenerowany kod próbuje odwoływać customerId, ale customerId nie istnieje jako jeden z członków klasy:

public class Customer {

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; 

Rozwiązanie:

Więc to, co próbowałem zrobić cały czas, to model relacji wiele do wielu. Co robiłem: klienta (M: 1) CustomerProduct (1: M) Produkt

Jednak to, co powinienem zrobić: Klienta (1: M) CustomerProduct (M: 1) Produkt

+0

Proszę pokazać kod, który powoduje błędy. –

+0

Dodałem kod powodujący błąd kompilacji – user2031401

+0

Czy ten kod jest rozwiązaniem? Czy miałeś jakieś postępy, które nie zostały tu opublikowane? – MatheusJardimB

Odpowiedz

0

Zmień customerId= customerProduct.getId(); do int customerId= customerProduct.getId();. lub jeszcze lepiej, po prostu wykonaj customerProduct__resolvedKey = customerProduct.getId(); przy założeniu, że customerProduct__resolvedKey jest poprawnie zadeklarowane.

+0

Wygląda na to, że działałoby to w funkcji setCustomerProduct, jednak nie jestem pewien, czy to samo podejście zadziała dla funkcji getCustomerProduct(). Myślę, że mogą tu być większe problemy, być może ze sposobem, w jaki definiuję moje relacje między wieloma jednostkami? .. ponieważ ten kod jest generowany automatycznie ..? – user2031401

+0

@user Nigdy nie używałem greendao, więc nie jestem pewien, w jaki sposób generuje kod Java. Po prostu odpowiadałem na podstawie błędów kompilatora. Proponuję utworzyć mały przykład, który odtwarza problem i opublikuje napisany kod, a nie wygenerowany kod. –

+0

Dzięki za twój wkład. Pierwszy przykład kodu to kod, który napisałem, kompiluje i działa dobrze. Uruchomienie tego fragmentu kodu (eksperta) powinno automatycznie generować encje i odpowiadające im relacje.Jednak wygenerowany automatycznie kod ma błąd kompilacji. – user2031401