androidsqliteone-to-onegreendaogreendao-generator

GreenDAO ToOne relationship not working


I am implementing a User class as:

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

   ...
}

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

...

}

The @ToOne should be working all right because I can see the generated UserDao with TABLE instruction:

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

During the app flow I create an User instance (not db) and set a Company object to it.

Then I call:

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

However my app is failing specifying that Company cannot be null. When I open the UserDao generated class I see that bindValues never creates a Company before saving the user.

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

What do I have to do in order to have the child entities created?

EDIT

OK I just read that relationships are not managed automatically by ORM. I am not seeing many benefits on using the lib hehe..


Solution

  • OK I just read that relationships are not managed automatically by ORM.

    So I should insert the company before.