触发器生成的自动刷新字段

Auto-refresh field generated by trigger

我使用 play framework 1.2.5.3(带 Hibernate 3.6.10),postgreSql 9.2.9.

我有 table requestsuid 我想通过我的 [=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

         ...
    }
}

我试过以下方法:

    
    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中没有效果class。

而且我不想在每次创建请求时手动刷新它。像那样:

request._save();
request.refresh();

实际上 @PostPersist 方法工作正常。可能必须在一些更改后完全重新启动游戏。