Поле автообновления, сгенерированное триггером

1

Я использую play framework 1.2.5.3 (с Hibernate 3.6.10), postgreSql 9.2.9.

У меня есть запросы таблиц с uid столбца, которые я хочу сгенерировать с помощью пользовательских правил, описанных в моем триггере postgreSql (до того, как значение триггера insert установит значение uid).

Я хочу использовать сгенерированное значение в моем коде. У меня есть следующие модели:

@Entity
@Table(name = "requests")
...
public class Request extends GenericModel {

    ...

    @Column(name = "uid", length = Domains.SHORT_STRING)
    public String uid;

    ...
}

Сложность, связанная с моделями наследования

@Entity
@Table(name = "kindergartenrequests")
@PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
public class KindergartenRequest extends Request {

    ...

    private static KindergartenRequest create(...) {

         KindergartenRequest request = new KindergartenRequest(...); // put null uid
         request._save();

         Logger.debug(request.uid); // uid is still null here

         ...
    }
}

Я пробовал:

  • Определение getter на поле uid:
    
    public String getUid() {

        if (this.uid == null) {
            this.refresh();
        }

        return this.uid;
    }
    
  • Определение ответного вызова post persist:
    
    @PostPersist
    private void afterSave() {

        if (this.uid == null) {

            this.uid = Request.em()
                .createNativeQuery("SELECT uid FROM requests WHERE id = :id")
                .setParameter("id", this.id)
                .getSingleResult()
                .toString();
        }
    }
    

Но в классе KindergartenRequest нет никакого эффекта.

И я не хочу обновлять его вручную при каждом создании запроса. Как это:

request._save();
request.refresh();
  • 1
    Вы смотрели, почему метод @PostPersist не работает. Разве это не называется?
  • 0
    Метод @PostPersist был вызван и введен в правильное значение uid, но в классе KindergartenRequest он все еще был нулевым. Я попробовал это снова сейчас, и это прекрасно работает. Может быть, мне нужно возобновить игру.
Теги:
hibernate
playframework-1.x

1 ответ

0
Лучший ответ

Ну, на самом деле метод @PostPersist работает нормально. Вероятно, после некоторых изменений игра должна быть полностью перезапущена.

  • 0
    Я обнаружил, что метод @PostPersist завершается ошибкой, когда я вызывал new Request() вместо new KindergartenRequest() и чем request.save() . javax.persistence.NoResultException: не найден объект для запроса

Ещё вопросы

Сообщество Overcoder
Наверх
Меню