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

时间:2015-03-26 08:33:47

标签: java hibernate postgresql playframework-1.x

我使用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

         ...
    }
}

我试过以下:

  • 在uid字段上定义getter:
    
    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();

1 个答案:

答案 0 :(得分:0)

实际上 @PostPersist 方法运行正常。在进行一些更改后,可能必须完全重启。