触发器生成的自动刷新字段
Auto-refresh field generated by trigger
我使用 play framework 1.2.5.3(带 Hibernate 3.6.10),postgreSql 9.2.9.
我有 table requests 列 uid 我想通过我的 [=43] 中描述的自定义规则生成=]greSql触发器(在插入触发器设置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
...
}
}
我试过以下方法:
- 在 uid 字段上定义 getter:
public String getUid() {
if (this.uid == null) {
this.refresh();
}
return this.uid;
}
- 定义post持久回调:
@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中没有效果class。
而且我不想在每次创建请求时手动刷新它。像那样:
request._save();
request.refresh();
实际上 @PostPersist 方法工作正常。可能必须在一些更改后完全重新启动游戏。
我使用 play framework 1.2.5.3(带 Hibernate 3.6.10),postgreSql 9.2.9.
我有 table requests 列 uid 我想通过我的 [=43] 中描述的自定义规则生成=]greSql触发器(在插入触发器设置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
...
}
}
我试过以下方法:
- 在 uid 字段上定义 getter:
public String getUid() {
if (this.uid == null) {
this.refresh();
}
return this.uid;
}
- 定义post持久回调:
@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中没有效果class。
而且我不想在每次创建请求时手动刷新它。像那样:
request._save();
request.refresh();
实际上 @PostPersist 方法工作正常。可能必须在一些更改后完全重新启动游戏。