我正在实现一个用户类:
@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 的很多好处。