未注释 class 中的房间异常

Room Exception in an un-annotated class

我有一个摘要 class,我有两个 @Dao 子 class 来自:

public abstract class PathBase
{
    private static final String PATH_DELIMITER = "/";

    abstract PathEntity getPath(Long id);
    abstract Long insertInternal(PathEntity row);
    abstract String getDatabase();

    abstract List<Long> getAncestorsInternal(String path);
    abstract List<Long> getDescendantsInternal(String path);
    ...
}

一旦 class 被 @Dao 扩展:

@Dao public abstract class FolderDao extends PathBase

我收到这个错误:

error: A DAO method can be annotated with only one of the following:Insert,Delete,Query,Update

方法:

    abstract PathEntity getPath(Long id);
    abstract Long insertInternal(PathEntity row);
    abstract String getDatabase();

它不抱怨:

    abstract List<Long> getAncestorsInternal(String path);
    abstract List<Long> getDescendantsInternal(String path);

即使它正在跟踪 @Entity class PathEntity 我也不知道为什么它会为 abstract String getDatabase();.

抛出错误

任何人都知道这里发生了什么......房间错误?

FWIW,当我将你的 PathBase 粘贴到一个项目中时,将我的一个实体替换为 PathEntity,我得到了你所有五个方法的错误,而不仅仅是前三个,并让我的 DAO class 扩展 PathBase.

这些方法不能abstract。 Room 正在生成 FolderDao 的实现,而 Room 无法实现这些方法。具体的错误消息并不理想,但我看不出这是怎么回事。

FWIW,我提交了 an issue 关于不明确的错误消息。

对于在 1.1.0 Room 中遇到复杂核心查询逻辑的类似情况的任何人,现在允许 @RawQery,这使您可以自己干净地实现核心逻辑。以下是我如何实现这个特定的解决方案:

https://gist.github.com/rcketscientist/4ded9ae64a770ff6929f27b5dbdbe13a