在ActiveJDBC模型构建期间执行其他操作

时间:2015-09-12 15:59:55

标签: java activejdbc

我有一个包含一个表words的数据库,因此ActiveJDBC中的ModelWord

当数据库中的一行被转换为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>时......在ActiveJDBC中创建Model对象期间操作数据的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您需要使用CallbackListener或CallbackAdapter

请参阅Lifecycle Callbacks页面。

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

你需要的是这样的东西:

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