GreenDAO поддерживает несколько отношений между таблицами.

Я пытался создать модель БД с помощью GreenDAO. проблема началась, когда я попытался создать более одной связи между разными таблицами.

в основном у меня есть таблица Message, таблица Conversation и таблица User.

У пользователя есть список сообщений, а у сообщения есть родительская беседа.

Я попытался написать этот код для создания БД:

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

после запуска этого кода я получил эту ошибку:

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)

означает ли это, что я не могу создать более одного отношения для каждой таблицы в моей БД?!

я должен писать все вручную?


person thepoosh    schedule 23.10.2012    source источник


Ответы (1)


То, что вы пытаетесь сделать, поддерживается greenDAO, и ваш код тоже выглядит хорошо. Я скопировал его в свою рабочую область, и он отлично выполнился. Так что я предполагаю, что что-то не так в коде, который вы пропустили.

person Markus Junginger    schedule 24.10.2012
comment
что вызовет этот тип исключения? - person thepoosh; 25.10.2012
comment
greenDAO не может обрабатывать FK, состоящий из двух или более свойств. - person Markus Junginger; 25.10.2012
comment
Я получил это исключение, когда забыл добавить столбец id к объекту, добавляемому с помощью addToOne. - person mharper; 18.12.2012