2013-03-12 16 views
6

Problema risolto! - Ho aggiunto la mia soluzione in fondo.Errore di compilazione many-to-many con greendao per android

Ho una domanda abbastanza semplice ma non riesco a trovare la risposta nella documentazione.

Sto provando a modellare una relazione molti-a-molti usando greendao per Android, tuttavia ottengo un errore di compilazione nel progetto principale dopo aver eseguito il progetto generatore.

Il mio codice che specifica i rapporti e le entità:

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

Gli errori: In Customer.java: customerId non può essere risolto in una variabile In Product.java: productId non può essere risolto a una variabile

Per favore aiuto, grazie.

Edit:

Ecco un estratto con il codice problema da Customer.java (auto-generata):

/** a-uno, deliberato in data primo accesso. */

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; 
} 

Problema: questo codice generato tenta di fare riferimento customerId, ma customerId non esiste come uno dei membri della classe:

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; 

Soluzione:

Quindi quello che stavo cercando di fare da sempre era modellare una relazione molti-a-molti. Quello che stavo facendo: cliente (M: 1) CustomerProduct (1: M) del prodotto

Tuttavia ciò che avrei dovuto fare: cliente (1: M) CustomerProduct (M: 1) Prodotto

+0

Si prega di mostrare il codice che causa gli errori. –

+0

Ho aggiunto il codice che causa l'errore di compilazione – user2031401

+0

Questo codice è la vostra soluzione? Hai avuto qualche progresso non pubblicato qui? – MatheusJardimB

risposta

0

Change customerId= customerProduct.getId(); a int customerId= customerProduct.getId();. o meglio ancora, basta fare customerProduct__resolvedKey = customerProduct.getId(); assumendo che customerProduct__resolvedKey sia dichiarato correttamente.

+0

Sembra che funzioni nella funzione setCustomerProduct, tuttavia non sono sicuro che lo stesso approccio funzionerà con la funzione getCustomerProduct(). Penso che potrebbero esserci problemi più grandi qui, forse con il modo in cui sto definendo le mie relazioni di entità molti-a-molti? .. poiché questo codice viene generato automaticamente ..? – user2031401

+0

@user Non ho mai usato greendao, quindi non sono sicuro di come genera codice Java. Stavo semplicemente rispondendo in base agli errori del compilatore. Ti suggerisco di creare un piccolo esempio per ricreare il problema e pubblicare il codice che hai scritto, non il codice generato. –

+0

Grazie per l'input. Il primo esempio di codice è il codice che ho scritto, esso compila e funziona bene. Eseguendo questo pezzo di codice (esperto) dovrebbe generare automaticamente entità e le loro relazioni corrispondenti.Tuttavia il codice generato automaticamente ha un errore di compilazione. – user2031401

Problemi correlati