我使用play framework 1.2.5.3(使用Hibernate 3.6.10),postgreSql 9.2.9。
我的表请求列 uid 我希望通过postgreSql触发器中描述的自定义规则生成(在插入触发器设置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();
答案 0 :(得分:0)
实际上 @PostPersist 方法运行正常。在进行一些更改后,可能必须完全重启。