未注释 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
我有一个摘要 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