1

我从 GreenDao3 迁移到 ObjectBox,但我的项目没有构建。我收到这样的错误

../app/build/generated/source/kapt/indexDebug/com/aff/index/main/boxdb/AliasDao.java 错误:(53、29)错误:找不到符号方法getContentId()

这是我在 GD3 中的别名课程:

import org.greenrobot.greendao.annotation.*;

import com.aff.index.main.db.DaoSession;
import org.greenrobot.greendao.DaoException;

// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit.

/**
 * Entity mapped to table "ALIAS".
 */
@Entity(active = true)
public class Alias {

    @Id
    private Long id;
    private String name;
    private String email;
    private Long aliasContentId;

    /** Used to resolve relations */
    @Generated
    private transient DaoSession daoSession;

    /** Used for active entity operations. */
    @Generated
    private transient AliasDao myDao;

    @ToOne(joinProperty = "aliasContentId")
    private Content content;

    @Generated
    private transient Long content__resolvedKey;

    @Generated
    public Alias() {
    }

    public Alias(Long id) {
        this.id = id;
    }

    @Generated
    public Alias(Long id, String name, String email, Long aliasContentId) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.aliasContentId = aliasContentId;
    }

    /** called by internal mechanisms, do not call yourself. */
    @Generated
    public void __setDaoSession(DaoSession daoSession) {
        this.daoSession = daoSession;
        myDao = daoSession != null ? daoSession.getAliasDao() : null;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Long getAliasContentId() {
        return aliasContentId;
    }

    public void setAliasContentId(Long aliasContentId) {
        this.aliasContentId = aliasContentId;
    }

    /** To-one relationship, resolved on first access. */
    @Generated
    public Content getContent() {
        Long __key = this.aliasContentId;
        if (content__resolvedKey == null || !content__resolvedKey.equals(__key)) {
            __throwIfDetached();
            ContentDao targetDao = daoSession.getContentDao();
            Content contentNew = targetDao.load(__key);
            synchronized (this) {
                content = contentNew;
                content__resolvedKey = __key;
            }
        }
        return content;
    }

    @Generated
    public void setContent(Content content) {
        synchronized (this) {
            this.content = content;
            aliasContentId = content == null ? null : content.getId();
            content__resolvedKey = aliasContentId;
        }
    }

    /**
    * Convenient call for {@link org.greenrobot.greendao.AbstractDao#delete(Object)}.
    * Entity must attached to an entity context.
    */
    @Generated
    public void delete() {
        __throwIfDetached();
        myDao.delete(this);
    }

    /**
    * Convenient call for {@link org.greenrobot.greendao.AbstractDao#update(Object)}.
    * Entity must attached to an entity context.
    */
    @Generated
    public void update() {
        __throwIfDetached();
        myDao.update(this);
    }

    /**
    * Convenient call for {@link org.greenrobot.greendao.AbstractDao#refresh(Object)}.
    * Entity must attached to an entity context.
    */
    @Generated
    public void refresh() {
        __throwIfDetached();
        myDao.refresh(this);
    }

    @Generated
    private void __throwIfDetached() {
        if (myDao == null) {
            throw new DaoException("Entity is detached from DAO context");
        }
    }

}

这是 ObjectBox 别名类:

// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit.

/**
 * Entity mapped to table "ALIAS".
 */
@Entity()
public class Alias {

    @Id
    private long id;
    private String name;
    private String email;
    private long aliasContentId;
    private ToOne<Content> content;

    public Alias() {
    }

    public Alias(long id) {
        this.id = id;
    }

    public Alias(long id, String name, String email, long aliasContentId, ToOne<Content> content) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.aliasContentId = aliasContentId;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public long getAliasContentId() {
        return aliasContentId;
    }

    public void setAliasContentId(long aliasContentId) {
        this.aliasContentId = aliasContentId;
    }

    public ToOne<Content> getContent() {
        return content;
    }

    public void setContent(ToOne<Content> content) {
        this.content = content;
    }
}

这是由 ObjectBox 生成的 DAO

// THIS CODE IS GENERATED BY objectbox, DO NOT EDIT.
/** 
 * DAO for table "Alias".
*/
public class AliasDao extends AbstractDao<Alias, Long> {

    public static final String TABLENAME = "Alias";

    /**
    * Properties of the Alias box.
    */
    private static io.objectbox.EntityInfo BOX_PROPERTIES = new Alias_();

    /**
     * Properties of entity Alias.<br/>
     * Can be used for QueryBuilder and for referencing column names.
     */
    public static class Properties {
        public final static Property Id = Alias_.id;
        public final static Property Name = Alias_.name;
        public final static Property Email = Alias_.email;
        public final static Property AliasContentId = Alias_.aliasContentId;
        public final static Property ContentId = Alias_.contentId;
    }

    private Query<Alias> content_AliasesQuery;

    public AliasDao(Box<Alias> box, IdentityScopeLong<Alias> identityScope) {
        super(box, BOX_PROPERTIES, identityScope);
    }

    public AliasDao(DaoSession daoSession, Box<Alias> box, IdentityScopeLong<Alias> identityScope) {
        super(daoSession, box, BOX_PROPERTIES, identityScope);
    }

    @Override
    public void readEntity(Alias from, Alias to) {
        to.setId(from.getId());
        to.setName(from.getName());
        to.setEmail(from.getEmail());
        to.setAliasContentId(from.getAliasContentId());
        to.setContentId(from.getContentId());
     }

    @Override
    public Long getKey(Alias entity) {
        if(entity != null) {
            return entity.getId();
        } else {
            return null;
        }
    }

    @Override
    protected final boolean isEntityUpdateable() {
        return true;
    }

}

这是GD3 Daogenerator的别名实体

Entity alias = schema.addEntity(ENTITY_ALIAS);
alias.addIdProperty();
alias.addStringProperty(PROPERTY_NAME);
alias.addStringProperty(PROPERTY_EMAIL);
Property aliasContentId = alias.addLongProperty("aliasContentId").getProperty();
alias.addToOne(content, aliasContentId);
ToMany contentToAlias = content.addToMany(alias, aliasContentId);
contentToAlias.setName(ALIASES);

我不知道为什么 Object Box 将 getContentId() 生成到 DAO 中,或者我该如何解决它。

4

1 回答 1

1

contentId是存储一对一关系 ID 的属性的默认名称content。因此,如果您想aliasContentId改用,您需要使用以下命令指定名称@TargetIdProperty

@TargetIdProperty("aliasContentId")
private ToOne<Content> content;
于 2018-02-22T08:10:45.923 回答