Android ROOM中的Nullable谓词

时间:2017-12-26 09:10:44

标签: android android-room

我有Dao和Query来加载所有Item by parentId

@Entity(
        indices = @Index("parent_id"),
        foreignKeys = @ForeignKey(entity = Parent.class, parentColumns = "id", childColumns = "parent_id")
)
public class Item extends BaseEntity {
    @ColumnInfo(name = "parent_id")
    private String parentId;
    private String name;

    ...
}

@Dao
public interface ItemDao {
   Item @Query("SELECT * FROM Item WHERE parent_id = :parentId")
   LiveData<List<Item>> loadByParentId(String parentId);
} 

这在parentId!= null时有效。使用parentId = null的查询返回0项。但我想加载parentId等于null的所有Item。

我找到了这个解决方案:

@Query("SELECT * FROM Item WHERE parent_id = :parentId OR (:parentId IS NULL AND parent_id IS NULL)")
LiveData<List<Item>> loadByParentId(String parentId);

可以有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用条件查询,例如:SELECT * FROM product WHERE parent_id = @ParentID OR ISNULL(@ParentID, '') = ''