2012-10-23 15 views
12

Próbowałem stworzyć model DB używając GreenDAO. problem zaczął się, gdy próbowałem utworzyć więcej niż jedną relację między różnymi tabelami.GreenDAO obsługuje wiele relacji między tabelami

zasadniczo mam tabelę Message, tabelę Conversation i tabelę User.

Użytkownik ma listę wiadomości, a wiadomość ma rozmowę nadrzędną.

Próbowałem pisząc ten kod do tworzenia DB:

private static void addUser(Schema schema) { 
      user = schema.addEntity("User"); 
      userId = user.addIdProperty().getProperty(); 
      user.addStringProperty("facebookId").unique().index(); 

      user.addStringProperty("firstName"); 
      user.addStringProperty("lastName"); 
      user.addStringProperty("fullName"); 
      user.addStringProperty("photoUrl"); 
    } 

    private static void addMessage(Schema schema) { 
      message = schema.addEntity("Message"); 
      messageId = message.addIdProperty().getProperty(); 
      message.addStringProperty("messageId").primaryKey(); 

      message.addDateProperty("date"); 
      message.addStringProperty("content"); 
      message.addStringProperty("typeString"); 
    } 

    private static void addConversation(Schema schema) { 
      conversation = schema.addEntity("Conversation"); 
      conversation.addIdProperty(); 

      conversation.addStringProperty("conversationId"); 
      // REST OF THE CODE 
    } 

    private static void fakeRelationship(Schema schema) { 
      Property author = message.addLongProperty("author").getProperty(); 
      Property parent = message.addLongProperty("parent").getProperty(); 

      message.addToOne(user, author); 
      message.addToOne(conversation, parent); 

      user.addToMany(message, author); 
      conversation.addToMany(message, parent); 
    } 

po uruchomieniu tego kodu, mam ten błąd:

Exception in thread "main" java.lang.RuntimeException: Currently only single FK columns are supported: ToOne 'parent' from Message to Conversation 
at de.greenrobot.daogenerator.ToOne.init3ndPass(ToOne.java:91) 
at de.greenrobot.daogenerator.Entity.init3rdPassRelations(Entity.java:557) 
at de.greenrobot.daogenerator.Entity.init3ndPass(Entity.java:550) 
at de.greenrobot.daogenerator.Schema.init3ndPass(Schema.java:185) 
at de.greenrobot.daogenerator.DaoGenerator.generateAll(DaoGenerator.java:94) 
at de.greenrobot.daogenerator.DaoGenerator.generateAll(DaoGenerator.java:79) 
at com.glidetalk.dao.generator.GlideDaoGenerator.main(GlideDaoGenerator.java:27) 

to właściwie meen, że nie można utworzyć więcej niż jedna relacja dla każdej tabeli w moim DB ?!

Czy muszę napisać wszystko ręcznie?

Odpowiedz

4

To, co próbujesz zrobić, jest obsługiwane przez greenDAO, a Twój kod wygląda dobrze. Skopiowałem go do mojej przestrzeni roboczej i wykonałem go doskonale. Sądzę więc, że coś jest nie tak z kodem, który pominąłeś.

+0

co spowoduje ten typ wyjątku? – thepoosh

+0

greenDAO nie może obsłużyć FK składającego się z dwóch lub więcej właściwości. –

+15

Mam ten wyjątek, gdy zapomniałem dodać kolumnę id do dodawanej jednostki za pomocą metody addToOne. – mharper

Powiązane problemy