2012-10-23 49 views
12

Tôi đã cố gắng tạo mô hình DB bằng GreenDAO. vấn đề bắt đầu khi tôi cố tạo nhiều mối quan hệ giữa các bảng khác nhau.GreenDAO hỗ trợ nhiều mối quan hệ giữa các bảng

về cơ bản, tôi có một bảng Message, một bảng Conversation và một bảng User.

Người dùng có danh sách thư và thư có cuộc hội thoại gốc.

Tôi cố gắng viết mã này để tạo 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); 
    } 

sau khi chạy đoạn mã này, tôi đã nhận lỗi này:

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) 

Điều này thực sự meen rằng tôi không thể tạo ra nhiều hơn một mối quan hệ cho mỗi bảng trong DB của tôi ?!

tôi có phải viết mọi thứ theo cách thủ công không?

Trả lời

4

Những gì bạn cố gắng làm được hỗ trợ bởi greenDAO và mã của bạn cũng có vẻ tốt. Tôi sao chép nó vào không gian làm việc của tôi và nó thực hiện hoàn toàn tốt đẹp. Vì vậy, tôi đoán một cái gì đó là sai trong mã bạn rời ra.

+0

điều gì sẽ gây ra loại ngoại lệ này? – thepoosh

+0

greenDAO không thể xử lý FK bao gồm hai hoặc nhiều thuộc tính. –

+15

Tôi nhận được ngoại lệ này khi tôi đã quên thêm cột id vào thực thể được thêm bằng cách sử dụng addToOne. – mharper

Các vấn đề liên quan