# 扩展内置实体
开发应用过程中,可能会遇到需要对内置实体的字段进行扩展的情况,例如对 SecUser(对应数据表是 sec_user),添加额外的字段。这里以 SecUser 为例,为该实体扩展一个 sourceId 字段,对应的数据表字段是 source_id。
扩展完成后,该实体的查询、新增、修改、删除等操作,都会包含 sourceId 字段。
# 新建实体文件
在 app/entities/ 目录下新建 SecUser.json 文件,内容如下:
查看实体代码
{
"name": "SecUser",
"packageName": "",
"title": "用户",
"tableName": "sec_user",
"fields": {
"id": {
"name": "id",
"packageName": "",
"title": "唯一主键",
"primaryKey": true,
"generated": true,
"type": "VARCHAR",
"length": 36,
"nullable": false,
"columnName": "id_",
"propertyName": "id",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"insertValue": "T(fly.data.common.expr.UUIDExpr).INSTANCE.getValue()",
"embedded": false,
"dynamic": false
},
"name": {
"name": "name",
"packageName": "",
"title": "用户名称",
"type": "VARCHAR",
"length": 150,
"nullable": false,
"columnName": "name_",
"propertyName": "name",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": true,
"embedded": false,
"dynamic": false
},
"username": {
"name": "username",
"packageName": "",
"title": "登陆账户",
"type": "VARCHAR",
"length": 50,
"nullable": false,
"columnName": "username_",
"propertyName": "username",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": true,
"embedded": false,
"dynamic": false
},
"password": {
"name": "password",
"packageName": "",
"title": "密码",
"type": "VARCHAR",
"length": 300,
"nullable": true,
"columnName": "password_",
"propertyName": "password",
"insertable": true,
"updatable": true,
"sortable": false,
"filterable": false,
"searchable": false,
"embedded": false,
"dynamic": false
},
"local": {
"name": "local",
"packageName": "",
"title": "是否为本地用户",
"type": "BOOLEAN",
"nullable": false,
"columnName": "local_",
"propertyName": "local",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"columnDefault": "0",
"defaultValue": false,
"embedded": false,
"dynamic": false
},
"tenantId": {
"name": "tenantId",
"packageName": "",
"title": "租户ID",
"generated": true,
"type": "VARCHAR",
"length": 60,
"nullable": false,
"columnName": "tenant_id",
"propertyName": "tenantId",
"insertable": true,
"updatable": false,
"sortable": true,
"filterable": true,
"searchable": false,
"defaultValue": "'default'",
"insertValue": "#vars.tenant_id",
"embedded": false,
"dynamic": false
},
"gender": {
"name": "gender",
"packageName": "",
"title": "性别",
"type": "VARCHAR",
"length": 15,
"nullable": true,
"columnName": "gender_",
"propertyName": "gender",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"columnDefault": "'U'",
"defaultValue": "'U'",
"dict": "Gender",
"embedded": false,
"dynamic": false
},
"enabled": {
"name": "enabled",
"packageName": "",
"title": "是否启用",
"type": "BOOLEAN",
"nullable": false,
"columnName": "enabled_",
"propertyName": "enabled",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"columnDefault": "1",
"defaultValue": true,
"embedded": false,
"dynamic": false
},
"email": {
"name": "email",
"packageName": "",
"title": "邮箱",
"type": "VARCHAR",
"length": 100,
"nullable": true,
"columnName": "email_",
"propertyName": "email",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"embedded": false,
"dynamic": false
},
"mobile": {
"name": "mobile",
"packageName": "",
"title": "手机",
"type": "VARCHAR",
"length": 20,
"nullable": true,
"columnName": "mobile_",
"propertyName": "mobile",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"embedded": false,
"dynamic": false
},
"mobile2": {
"name": "mobile2",
"packageName": "",
"title": "手机2",
"type": "VARCHAR",
"length": 20,
"nullable": true,
"columnName": "mobile2_",
"propertyName": "mobile2",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"embedded": false,
"dynamic": false
},
"mobile3": {
"name": "mobile3",
"packageName": "",
"title": "手机3",
"type": "VARCHAR",
"length": 20,
"nullable": true,
"columnName": "mobile3_",
"propertyName": "mobile3",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"embedded": false,
"dynamic": false
},
"telephone": {
"name": "telephone",
"packageName": "",
"title": "工作电话",
"type": "VARCHAR",
"length": 20,
"nullable": true,
"columnName": "telephone_",
"propertyName": "telephone",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"embedded": false,
"dynamic": false
},
"orgId": {
"name": "orgId",
"packageName": "",
"title": "所属组织ID",
"type": "VARCHAR",
"length": 36,
"nullable": true,
"columnName": "org_id",
"propertyName": "orgId",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"embedded": false,
"dynamic": false
},
"orgName": {
"name": "orgName",
"packageName": "",
"title": "所属组织名称",
"type": "VARCHAR",
"length": 150,
"nullable": true,
"columnName": "org_name",
"propertyName": "orgName",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"embedded": false,
"dynamic": false
},
"userType": {
"name": "userType",
"packageName": "",
"title": "用户类型",
"type": "VARCHAR",
"length": 15,
"nullable": true,
"columnName": "user_type",
"propertyName": "userType",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"dict": "UserType",
"embedded": false,
"dynamic": false
},
"extended": {
"name": "extended",
"packageName": "",
"title": "自定义扩展字段",
"type": "LONGVARCHAR",
"nullable": true,
"columnName": "extended_",
"propertyName": "extended",
"insertable": true,
"updatable": true,
"sortable": false,
"filterable": false,
"searchable": false,
"embedded": false,
"dynamic": false
},
"createdAt": {
"name": "createdAt",
"packageName": "",
"title": "创建时间",
"generated": true,
"type": "TIMESTAMP",
"nullable": true,
"columnName": "created_at",
"propertyName": "createdAt",
"insertable": true,
"updatable": false,
"sortable": true,
"filterable": true,
"searchable": false,
"insertValue": "#vars.now",
"updateValue": "#vars.now",
"embedded": false,
"dynamic": false
},
"createdBy": {
"name": "createdBy",
"packageName": "",
"title": "创建者",
"generated": true,
"type": "VARCHAR",
"length": 36,
"nullable": true,
"columnName": "created_by",
"propertyName": "createdBy",
"insertable": true,
"updatable": false,
"sortable": true,
"filterable": true,
"searchable": false,
"insertValue": "#vars.user.id",
"updateValue": "#vars.user.id",
"embedded": false,
"dynamic": false
},
"updatedAt": {
"name": "updatedAt",
"packageName": "",
"title": "更新时间",
"generated": true,
"type": "TIMESTAMP",
"nullable": true,
"columnName": "updated_at",
"propertyName": "updatedAt",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"insertValue": "#vars.now",
"updateValue": "#vars.now",
"embedded": false,
"dynamic": false
},
"updatedBy": {
"name": "updatedBy",
"packageName": "",
"title": "更新者",
"generated": true,
"type": "VARCHAR",
"length": 36,
"nullable": true,
"columnName": "updated_by",
"propertyName": "updatedBy",
"insertable": true,
"updatable": true,
"sortable": true,
"filterable": true,
"searchable": false,
"insertValue": "#vars.user.id",
"updateValue": "#vars.user.id",
"embedded": false,
"dynamic": false
},
"sourceId": {
"name": "SourceId",
"packageName": "",
"title": "来源ID",
"type": "int",
"columnName": "source_id",
"nullable" : true,
"updatable" : true,
"sortable" : true,
"filterable" : true,
"searchable" : true,
"order": 100
}
},
"relations": {
"org": {
"name": "org",
"packageName": "",
"type": "MANY_TO_ONE",
"targetEntity": "SecOrg",
"joinFields": [
{
"local": "orgId",
"target": "id"
}
],
"optional": true,
"expandable": true,
"generateForeignKey": false
}
},
"indexes": {},
"onEvents": {},
"audited": false,
"dynamic": false
}
在该文件中主要是增加了 sourceId 字段,用于记录用户来源。
{
"fields": {
"sourceId": {
"name": "SourceId",
"packageName": "",
"title": "来源ID",
"type": "int",
"columnName": "source_id",
"nullable" : true,
"updatable" : true,
"sortable" : true,
"filterable" : true,
"searchable" : true,
"order": 100
}
}
}
# 后端获取扩展字段
在后端通过 java 的方式获取扩展字段(关键代码)
SecUserEntity entity = dao.find(SecUserEntity.class, "userId");
entity.getProperties().get("sourceId");