2015-09-12 2 views
0

У меня есть база данных с одной таблицей words, поэтому мой Model в ActiveJDBC - Word.Выполнение дополнительных операций при построении модели ActiveJDBC

Когда строка из базы данных отлита по модели 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?

ответ

1

Вы должны использовать CallbackListener или ее CallbackAdapter

Пожалуйста, смотрите Lifecycle Callbacks страницу.

Причина, по которой ваш ЗАПРЕЩАЕТ null, заключается в том, что в момент создания модели значения атрибута еще не установлены.

Что вам нужно что-то вроде этого:

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

Эй Игорь, я прочитал документацию, но не все, что связано с обратными вызовами не видел. Я использую Rails, поэтому я разочарован в себе, даже не задумываясь об этом! Это именно то, что я искал, большое спасибо! PS - Мне нравится твоя работа на ActiveJDBC. Это сделало мое кодирование более приятным :) –

+0

удивительный, наслаждайтесь. Если вы используете Rails, вы тоже будете чувствовать себя дома с помощью ActiveWeb. – ipolevoy

+0

@ipolevoy на ActiveJDBC 1.4.11 эти обратные вызовы не вызываются, любая идея о том, что может вызвать такое поведение? – perrohunter

Смежные вопросы