Я использую 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
...
}
}
Я пробовал:
public String getUid() {
if (this.uid == null) {
this.refresh();
}
return this.uid;
}
@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();
Ну, на самом деле метод @PostPersist работает нормально. Вероятно, после некоторых изменений игра должна быть полностью перезапущена.
new Request()
вместо new KindergartenRequest()
и чем request.save()
. javax.persistence.NoResultException: не найден объект для запроса
@PostPersist
не работает. Разве это не называется?