我想知道是否可以在条件查询期间初始化实体的瞬时属性。

例子

@Entity
public SampleEntity{

  @Id
  private long id;

  [more attributes]

  @Transient
  private String someTransientString;

  [getters and setters]
}

现在,我想编写一个CriteriaQuery,它会加载所有SampleEntity并自动将someTransientString设置为imamightlyfinestring。我想到的是以下类似的SQL:
SELECT ID AS ID, [..], 'imamightilyfinestring' AS SOME_TRANSIENT_STRING FROM SAMPLE_ENTITY

我当然知道,我可以简单地迭代结果集合并手动设置属性,但是我想知道在JPA2中是否有一种方法可以做到这一点。

谢谢 :)

最佳答案

不,您不能在查询中执行此操作。

如果可以在查询之外找出someTransientString的值,则可以使用PostLoad回调(摘自JPA 2.0规范):



只需将以下内容添加到您的实体中:

@PostLoad
protected void initSomeTransientString() {
    //Likely some more complex logic to figure out value,
    //if it is this simple, just set it directly in field declaration.
    someTransientString = "imamightilyfinestring";
}

关于java - 在CriteriaQuery期间初始化JPA实体的瞬时属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10313535/

10-11 18:16