RepositoryBase<T>
Defined in: packages/rxdb/src/repository/RepositoryBase.ts:20
数据仓库
所有 Repository(Repository、插件侧的 TreeRepository / GraphRepository、
以及适配器侧的 AdapterRepository)的公共基类。它只承担实体引用的薄包装:
- 创建 / 查找 / 是否存在 —— 全部委托给 EntityManager 的 LRU 缓存;
- 更新 —— 走 EntityStatus.replace(有的话)或 fallback 到
Object.assign同时记下origin,供下游 diff / change 反演使用。
真正的"查询 + 同步 + 变更编排"放子类或适配器侧,基类不沾这些业务, 否则基类的复杂度会随每个仓库特性线性增长。
Extended by
Type Parameters
| Type Parameter | Description |
|---|---|
T extends EntityType | 实体类型构造器,决定 findOptions / idType 等静态类型的派生路径。 |
Constructors
Constructor
new RepositoryBase<T>(rxdb, EntityType): RepositoryBase<T>;
Defined in: packages/rxdb/src/repository/RepositoryBase.ts:42
Parameters
| Parameter | Type |
|---|---|
rxdb | RxDB |
EntityType | T |
Returns
RepositoryBase<T>
Properties
EntityType
readonly EntityType: T;
Defined in: packages/rxdb/src/repository/RepositoryBase.ts:44
rxdb
protected readonly rxdb: RxDB;
Defined in: packages/rxdb/src/repository/RepositoryBase.ts:43
_STATIC_METHODS
protected static _STATIC_METHODS: string[] = [];
Defined in: packages/rxdb/src/repository/RepositoryBase.ts:29
子类声明的"静态方法名"清单,用于把 User.findOne(...) 这样的方法
注入到实体类上(EntityManager.init 时挂)。
Remarks
用类字段 static 而非构造器里赋值 —— 字段初始化在 extends 链上是自底向上
合并的,所以子类定义的 _STATIC_METHODS 不会丢;运行时反射取的是当前类的字段。
Accessors
staticMethods
Get Signature
get static staticMethods(): string[];
Defined in: packages/rxdb/src/repository/RepositoryBase.ts:38
当前类(含继承链上各层)声明的全部静态方法名
Remarks
没有沿原型链累加:每个子类自己写一份 _STATIC_METHODS,避免运行时
反射出祖先的 get / findOne 这类名字后,再被后代意外覆盖一次。
Returns
string[]
Methods
createEntityRef()
createEntityRef(data): EntityInstanceType<T>;
Defined in: packages/rxdb/src/repository/RepositoryBase.ts:58
创建(或复用)一个实体引用
Parameters
| Parameter | Type | Description |
|---|---|---|
data | EntityUpdateData<T> | 字段初始值;其中 id 缺省时会自动生成 |
Returns
已挂到 EntityManager 缓存里的实体实例
Remarks
不管入参 id 是否已存在于缓存,都会优先返回缓存里的实例(覆盖式刷新);
走 rxdb.entityManager.createEntityRef 是为了复用同一份引用语义,避免
不同调用栈里拿到的是两个状态不同步的克隆。
getEntityRef()
getEntityRef(id):
| EntityInstanceType<T>
| undefined;
Defined in: packages/rxdb/src/repository/RepositoryBase.ts:68
按 ID 在当前进程的实体缓存中查找实体
Parameters
| Parameter | Type | Description |
|---|---|---|
id | EntityStaticType<T, "idType"> | 实体主键 |
Returns
| EntityInstanceType<T>
| undefined
缓存命中则返回实例,未命中返回 undefined(不触发数据库查询)
hasEntityRef()
hasEntityRef(id): boolean;
Defined in: packages/rxdb/src/repository/RepositoryBase.ts:82
判定当前进程的实体缓存里是否有指定 ID
Parameters
| Parameter | Type | Description |
|---|---|---|
id | EntityStaticType<T, "idType"> | 实体主键 |
Returns
boolean
缓存命中返回 true,否则 false
Remarks
等价于 getEntityRef(id) !== undefined,单独提供是为了让"批量预热"和
"差异同步"等热点路径省掉一次引用创建 / 取状态的开销。
updateEntity()
updateEntity(entity, update): void;
Defined in: packages/rxdb/src/repository/RepositoryBase.ts:97
用 update 覆盖实体字段
Parameters
| Parameter | Type | Description |
|---|---|---|
entity | InstanceType<T> | 目标实体 |
update | InstanceType<T> | 待写入的字段;主键 id 也会被赋值(用于 hydrate 场景) |
Returns
void
Remarks
走 EntityStatus.applyExternal,保证 dirty tracking 与 patch 生成走的是同一条路径,
且实体有未保存编辑时逐字段避让而不是整行覆盖 —— 活查询整批回填会命中已被用户改过的实体,
无条件 replace 会静默吃掉那些编辑。