Java 在CriteriaQuery期间初始化JPA实体的瞬态属性
我想知道在条件查询期间是否可以初始化实体的临时属性 范例Java 在CriteriaQuery期间初始化JPA实体的瞬态属性,java,jpa-2.0,criteria-api,Java,Jpa 2.0,Criteria Api,我想知道在条件查询期间是否可以初始化实体的临时属性 范例 @Entity public SampleEntity{ @Id private long id; [more attributes] @Transient private String someTransientString; [getters and setters] } 现在,我想编写一个CriteriaQuery,加载所有SampleEntitys,并自动将someTransientString设
@Entity
public SampleEntity{
@Id
private long id;
[more attributes]
@Transient
private String someTransientString;
[getters and setters]
}
现在,我想编写一个CriteriaQuery,加载所有SampleEntity
s,并自动将someTransientString
设置为imamightlyfinestring
。我想到了类似以下SQL的东西:
SELECT ID AS ID, [..], 'imamightilyfinestring' AS SOME_TRANSIENT_STRING FROM SAMPLE_ENTITY
我当然知道我可以简单地迭代生成的集合并手动设置属性,但我想知道是否有一种方法可以在JPA2中实现这一点
谢谢:)不,您不能在查询中执行此操作 如果您可以在查询之外计算出someTransientString的值,那么可以使用回调(摘自JPA2.0规范): 实体的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";
}
您还可以在默认(即,无参数)构造函数中初始化瞬态 您可以看到,这就是在EclipseLink中使用的策略(请阅读以下链接中的最后一条评论):