# 扩展内置实体

开发应用过程中,可能会遇到需要对内置实体的字段进行扩展的情况,例如对 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");
顶部