Skip to content

3.1.0 版本 计算方法 HASH 增加返回类型 引入的该问题, 3.0.6 版本解析正常 #80

@jackmsn001

Description

@jackmsn001

3.1.0 版本 计算方法 HASH 增加返回类型 引入的该问题, 3.0.6 版本解析正常

解析如下代码是提示错误:Caused by: com.adrninistrator.javacg2.exceptions.JavaCG2Error: 返回类型为空 cn.xxxx.bs.calc.mapper.ClearHistoryMapper$ClearHistorySqlProvider:buildSql()

import cn.jojo.sales.app.action.prewarning.cleartask.ClearHistoryTask;
import lombok.experimental.UtilityClass;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.util.StringUtils;

import java.time.LocalDate;

/**
 * 历史数据清理Mapper
 */
@Mapper
public interface ClearHistoryMapper {

    /**
     * 历史数据清理操作
     *
     * @param targetDate 目标日期
     * @param task       处理任务
     * @return 处理条数
     */
    @DeleteProvider(type = ClearHistorySqlProvider.class, method = "buildSql")
    int clearHistory(@Param("targetDate") LocalDate targetDate,
                     @Param("task") ClearHistoryTask task);

    @UtilityClass
    @SuppressWarnings("java:S1118")
    class ClearHistorySqlProvider {

        public static String buildSql(
                @Param("task") final ClearHistoryTask task) {
            StringBuilder sqlBuilder = new StringBuilder()
                    .append("DELETE FROM ")
                    .append(task.getTableName())
                    .append(" WHERE ")
                    .append(task.getTimeField())
                    .append(" < #{targetDate}");
            if (!StringUtils.isEmpty(task.getCondition())) {
                sqlBuilder.append(" AND ")
                        .append(task.getCondition());
            }
            sqlBuilder.append(" LIMIT ")
                    .append(task.getBatchSize());
            return sqlBuilder.toString();
        }
    }
}

关联类ClearHistoryTask 的代码

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

/**
 * 历史数据清理任务对象
 */
@Getter
@Setter
@ToString
@NoArgsConstructor
public class ClearHistoryTask {

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 任务标识
     */
    private String taskCode;

    /**
     * 任务排序
     */
    private Integer priority;

    /**
     * 策略类型
     */
    private Integer strategy;

    /**
     * 策略配置
     */
    private String strategyConfig;

    /**
     * 业务表名
     */
    private String tableName;

    /**
     * 时间字段
     */
    private String timeField;

    /**
     * 保留时长(日)
     */
    private Integer retainDay;

    /**
     * 过滤条件
     */
    private String condition;

    /**
     * 分批大小
     */
    private Integer batchSize;

    /**
     * 停顿时间(毫秒)
     */
    private Integer pauseMillis;


    @Builder(builderClassName = "SimpleBuilder",
            builderMethodName = "simpleBuilder")
    public ClearHistoryTask(Long id,
                            String tableName,
                            String timeField,
                            Integer retainDay,
                            String condition,
                            Integer batchSize,
                            Integer pauseMillis) {
        this.id = id;
        this.priority = 10;
        this.tableName = tableName;
        this.timeField = timeField;
        this.retainDay = retainDay;
        this.condition = condition;
        this.batchSize = batchSize;
        this.pauseMillis = pauseMillis;
    }

    @Builder(builderClassName = "DefaultBuilder")
    public ClearHistoryTask(Long id,
                            String taskCode,
                            Integer priority,
                            Integer strategy,
                            String strategyConfig,
                            String tableName,
                            String timeField,
                            Integer retainDay,
                            String condition,
                            Integer batchSize,
                            Integer pauseMillis) {
        this.id = id;
        this.taskCode = taskCode;
        this.priority = priority;
        this.strategy = strategy;
        this.strategyConfig = strategyConfig;
        this.tableName = tableName;
        this.timeField = timeField;
        this.retainDay = retainDay;
        this.condition = condition;
        this.batchSize = batchSize;
        this.pauseMillis = pauseMillis;
    }
}

运行入库h2数据库时候,会产生如下报错


2025-07-12 21:28:59.492 ERROR 1788 --- [pool-2-thread-1] c.t.b.p.d.s.i.PrecisionDemoServiceImpl   : 异步任务2【快速入库H2数据库】执行出错

java.util.concurrent.CompletionException: com.adrninistrator.javacg2.exceptions.JavaCG2Error: 返回类型为空 cn.xxxx.bs.calc.mapper.ClearHistoryMapper$ClearHistorySqlProvider:buildSql()
	at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273) ~[na:1.8.0_352]
	at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280) ~[na:1.8.0_352]
	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1643) ~[na:1.8.0_352]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_352]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_352]
	at java.lang.Thread.run(Thread.java:750) ~[na:1.8.0_352]
Caused by: com.adrninistrator.javacg2.exceptions.JavaCG2Error: 返回类型为空 cn.xxxx.bs.calc.mapper.ClearHistoryMapper$ClearHistorySqlProvider:buildSql()
	at com.adrninistrator.jacg.util.JACGClassMethodUtil.genMethodHashWithLen(JACGClassMethodUtil.java:55) ~[java-all-call-graph-3.2.1.jar:na]
	at com.adrninistrator.jacg.dto.writedb.WriteDbData4MethodCall.genInstance(WriteDbData4MethodCall.java:89) ~[java-all-call-graph-3.2.1.jar:na]
	at com.adrninistrator.jacg.handler.writedb.WriteDbHandler4MethodCall.genData(WriteDbHandler4MethodCall.java:128) ~[java-all-call-graph-3.2.1.jar:na]
	at com.adrninistrator.jacg.handler.writedb.WriteDbHandler4MethodCall.genData(WriteDbHandler4MethodCall.java:26) ~[java-all-call-graph-3.2.1.jar:na]
	at com.adrninistrator.jacg.handler.writedb.AbstractWriteDbHandler.handle(AbstractWriteDbHandler.java:492) ~[java-all-call-graph-3.2.1.jar:na]
	at com.adrninistrator.jacg.runner.RunnerWriteDb.handleMethodCall(RunnerWriteDb.java:1104) ~[java-all-call-graph-3.2.1.jar:na]
	at com.adrninistrator.jacg.runner.RunnerWriteDb.operate(RunnerWriteDb.java:378) ~[java-all-call-graph-3.2.1.jar:na]
	at com.adrninistrator.jacg.runner.RunnerWriteDb.handle(RunnerWriteDb.java:166) ~[java-all-call-graph-3.2.1.jar:na]
	at com.adrninistrator.jacg.runner.base.AbstractRunner.run(AbstractRunner.java:149) ~[java-all-call-graph-3.2.1.jar:na]
	at cn.xxxx.bs.precision.demo.service.impl.MethodInfoServiceImpl.runWriteDbTask(MethodInfoServiceImpl.java:54) ~[classes/:na]
	at cn.xxxx.bs.precision.demo.service.impl.PrecisionDemoServiceImpl.lambda$handle$0(PrecisionDemoServiceImpl.java:60) ~[classes/:na]
	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1640) ~[na:1.8.0_352]
	... 3 common frames omitted

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions