2017-04-10 89 views
1

我實施用戶類爲:GreenDAO TOONE關係不工作

@Entity 
public class User implements Serializable { 

    /** Serial version UID */ 
    static final long serialVersionUID = 200L; 

    @Id 
    /** The user system id */ 
    private long id; 

    @Index(unique = true) 
    /** The user login username*/ 
    private String username; 

    /** The user first name */ 
    private String firstName; 

    /** The user last name*/ 
    public String lastName; 

    @ToOne 
    @NotNull 
    /** The company this user belongs*/ 
    private Company company; 

    ... 
} 

和公司

@Entity 
public class Company extends JsonModel implements Serializable { 

    /** Serial version UID */ 
    static final long serialVersionUID = 100L; 

    @Id 
    /** The sqlite record id */ 
    private long id; 


    @NotNull 
    /** The company public name */ 
    private String name; 

... 

} 

的@ToOne應該是工作沒事,因爲我可以看到生成的userDAO的TABLE指令:

public final static Property Company = new Property(6, long.class, "company", false, "COMPANY"); 

在應用程序流程I期間創建一個用戶實例(不是數據庫)併爲其設置一個公司對象。

然後我打電話:

UserDao userDao = daoSession.getUserDao(); 
userDao.insert(user); 

但是我的應用程序失敗,指定公司不能爲空。當我打開UserDao生成的類時,我發現bindValues在保存用戶之前從不創建公司。

@Override 
    protected final void bindValues(DatabaseStatement stmt, User entity) { 
     stmt.clearBindings(); 
     stmt.bindLong(1, entity.getDbId()); 
     stmt.bindLong(2, entity.getId()); 

     String username = entity.getUsername(); 
     if (username != null) { 
      stmt.bindString(3, username); 
     } 

     String firstName = entity.getFirstName(); 
     if (firstName != null) { 
      stmt.bindString(4, firstName); 
     } 

     String lastName = entity.getLastName(); 
     if (lastName != null) { 
      stmt.bindString(5, lastName); 
     } 
    } 

爲了創建子實體,我該做些什麼?

編輯

OK我剛纔讀的關係不受ORM自動管理。我沒有看到使用lib赫赫有很多好處..

回答

0

好吧我只是讀了ORM不自動管理關係。

所以我應該插入公司之前。