class TransparentMessageCodecEntity extends GenericEntity<String> implements RecordCreationEntity, RecordModifierEntity {

    @Schema(description = "产品ID")
    @Column(length = 64, nullable = false, updatable = false)
    private String productId;

    @Schema(description = "设备ID")
    @Column(length = 64, updatable = false)
    private String deviceId;

    /**
     * @see TransparentMessageCodecProvider#getProvider()
     */
    @Schema(description = "编解码器提供商,如: jsr223")
    @Column(length = 64, nullable = false)
    private String provider;

    /**
     * 编解码配置
     *
     * @see TransparentMessageCodecProvider#createCodec(Map)
     */
    @Schema(description = "编解码配置")
    @Column(nullable = false)
    @ColumnType(jdbcType = JDBCType.LONGVARCHAR, javaType = String.class)
    @JsonCodec
    private Map<String, Object> configuration;

    @Schema(description = "创建人ID")
    @Column(length = 64, nullable = false, updatable = false)
    private String creatorId;

    @Schema(description = "创建时间")
    @Column(updatable = false)
    @DefaultValue(generator = Generators.CURRENT_TIME)
    private Long createTime;

    @Schema(description = "修改人ID")
    @Column(length = 64)
    private String modifierId;

    @Schema(description = "修改时间")
    @DefaultValue(generator = Generators.CURRENT_TIME)
    private Long modifyTime;

    @Override
    public String getId() {<FILL_FUNCTION_BODY>}

    public static String createId(String productId, String deviceId) {
        return DigestUtils.md5Hex(String.join("|", productId, deviceId));
    }
}

        if (!StringUtils.hasText(super.getId())) {
            super.setId(
                createId(productId, deviceId)
            );
        }
        return super.getId();
    
<no_super_class>