【问题标题】:Spring Roo generating errors in ActiveRecord.aj for EntityManagerSpring Roo 在 ActiveRecord.aj 中为 EntityManager 生成错误
【发布时间】:2015-11-23 10:07:29
【问题描述】:

我使用的是 Roo 1.3.2。我有一个抽象类和一个具体实现如下:

@RooJavaBean
@RooToString
@RooJpaActiveRecord(inheritanceType="TABLE_PER_CLASS")    
public abstract class Task {
        @Size(min = 2)
        private String name;
        public abstract void execute(Object... parameters);
}

@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class ImportLoadPlanTask extends Task {
    @Size(min = 2)
    private String svnFile;

    @Override
    public void execute(Object... parameters){
        ....
    }
}

但是生成的 ActiveRecord.aj 文件会生成以下代码

public static final EntityManager Task.entityManager() {
        EntityManager em = new Task() {
            public void execute(java.lang.Object parameters) {
                throw new UnsupportedOperationException();
            }
        }.entityManager;
        if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
        return em;
    }

IDE 的错误信息是:

The type new Task(){} must implement the inherited abstract Task.execute(Object ...)

如果我从 Task 类中删除 abstract 关键字,错误就会消失,因为 Roo 不会尝试生成上面列出的代码。

我怎样才能让它工作?这是 Roo 错误吗?

【问题讨论】:

    标签: java spring spring-roo


    【解决方案1】:

    这是一个检测parameters参数类型的错误。请问,你能在Spring Roo Jira举报吗?

    要解决它,只需使用 push-in

    public abstract class Task {
        @Size(min = 2)
        private String name;
        public abstract void execute(Object... parameters);
    
        // Push-in entityManager method from .aj file
        public static final EntityManager entityManager() {
            EntityManager em = new Task() {
                public void execute(Object... parameters) {
                    throw new UnsupportedOperationException();
                }
            }.entityManager;
           if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
           return em;
        }
    }
    

    这就是 Spring Roo 的要点之一:您始终可以按照自己的方式行事!

    祝你好运!

    【讨论】:

    • 感谢您的回复,我会尝试您的建议。我记录了一个错误。感兴趣的可以在这里找到ROO-3688
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 2020-08-17
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多