java - 在 ActiveJDBC 模型构建过程中执行附加操作

标签 java activejdbc

我有一个包含一张表的数据库 words ,所以我的Model在 ActiveJDBC 中是 Word .

当数据库中的一行被转换为Word时模型中,我想执行一些额外的操作,例如将一些数据转换为枚举以获得更好的抽象。

我向模型添加了一个构造函数,该构造函数被适当调用,但尝试访问任何数据都会返回 null 。这是Word类(缩写):

public class Word extends Model {

    private static final Logger log = LogManager.getLogger(Word.class);
    public static final String SPELLING = "ortho";

    public Word() {
        log.info("In constructor");
        log.info("Word spelling: " + getSpelling());
    }

    public String getSpelling() {
        return this.getString(SPELLING);
    }
}

但我在日志中得到以下内容:

10:31:49.372 [main] INFO Word - In constructor
10:31:49.373 [main] INFO Word - Word spelling: null

我需要能够将其中一些字段转换为枚举并以其他方式操作它,以便更轻松地使用它。

我应该离开吗Word作为空类,例如:

public class Word extends Model {}

并且让另一个类在构造函数中接受它?这会产生很多不必要的麻烦,特别是在使用 List<Word> 时。 ... Model期间操作数据的最佳方式是什么?在 ActiveJDBC 中创建对象?

最佳答案

您需要使用 CallbackListener 或 CallbackAdapter

请参阅Lifecycle Callbacks页。

您的 SPELLING 为 null 的原因是因为在创建模型时,尚未设置属性值。

你需要的是这样的:

public class Word extends Model{
   public void afterLoad(){
     String spelling = getString(SPELLING); //you have data  now
   }
}

关于java - 在 ActiveJDBC 模型构建过程中执行附加操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32540837/

相关文章:

java - 传递数组时遇到一些问题

java - 在没有轮询的情况下观察变量的变化

java - 将 Spark-Java(Gradle、Maven)应用程序部署到 AWS Elastic Beanstalk

java - 带有 ActiveJDBC 的原始 SQL

java - 如何在 activejdbc 中保存从表单提交的值?

java - 为什么这个 String.equals() 不起作用?

Java 和 SEO URL

postgresql - activejdbc 中的多对多额外字段

java - Gradle:如何在编译后但在将文件打包到 Jar 中之前添加自定义任务?

java - 在activeJDBC中获取带有offset和orderBy的记录