3

我正在实现一个用户类:

@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 应该可以正常工作,因为我可以使用 TABLE 指令看到生成的 UserDao:

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

在应用程序流程中,我创建了一个用户实例(不是数据库)并为其设置了一个公司对象。

然后我打电话:

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

为了创建子实体,我必须做什么?

编辑

好的,我刚刚读到关系不是由 ORM 自动管理的。我没有看到使用 lib hehe 的很多好处。

4

1 回答 1

0

好的,我刚刚读到关系不是由 ORM 自动管理的。

所以我应该先插入公司。

于 2017-04-10T08:23:07.813 回答