我想知道在条件查询期间是否可以初始化实体的瞬态属性。
实施例
@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中执行此操作。
谢谢:)
答案 0 :(得分:12)
不,你不能在查询中这样做。
如果你可以在查询之外找出someTransientString的值,你可以使用PostLoad回调(摘自JPA 2.0规范):
在实体执行后调用实体的PostLoad方法 从数据库或之后加载到当前持久化上下文中 刷新操作已应用于它。 PostLoad方法是 在返回或访问查询结果之前或之前调用 协会被遍历。
只需将以下内容添加到您的实体:
@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";
}