当前位置: 首页 > 面试题库 >

在CriteriaQuery期间初始化JPA实体的瞬时属性

裴存
2023-03-14
问题内容

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

@Entity
public SampleEntity{

  @Id
  private long id;

  [more attributes]

  @Transient
  private String someTransientString;

  [getters and setters]
}

现在,我想编写一个CriteriaQuery,它加载所有SampleEntitys并自动设置someTransientStringimamightlyfinestring。我想到的是以下SQL:

SELECT ID AS ID, [..], 'imamightilyfinestring' AS SOME_TRANSIENT_STRING FROM SAMPLE_ENTITY

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

谢谢 :)


问题答案:

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

如果可以在查询之外找出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";
}


 类似资料:
  • 我正在开发我的第一个 Swing 应用程序,现在提出了一个难题:在静态初始化期间或开始实际执行后执行引导和资源初始化。我是什么意思...我有单例: 因此,方法如下所示 或者,也许我在启动后手动初始化资源,然后运行它。逻辑上正确的方式是什么?

  • 问题内容: 我正在使用JPA(Hibernate作为我的JPA提供程序)。我实际上是在尝试避免hibernate细节并使用JPA规范。我有一个初始化惰性实体的函数。不幸的是,它使用了Hibernate特定的功能。这是我的功能: 是否有任何纯JPA方式初始化实体? 问题答案: 似乎没有一种初始化实体的标准方法。 有一种标准的方法可以检查是否已初始化(完全加载)实体,这是通过PersistenceUn

  • 提前谢谢。 所以我试图用Maven部署JavaFX应用程序。 它给了我这个错误 我知道为什么它会给出错误。我正在使用Firebase。所以在构建时间初始化的类很少。那么我如何避免它呢? 我评论了我在我的项目中做的所有Firebase代码,并再次测试了它,然后它工作正常。但是当我再次包含Firebase时,我面临这个问题。任何帮助请

  • 我试图直接理解object属性的初始化,但得到一个编译错误。 null null 我不想使用构造函数初始化object,只是为了理解Java语法。请告诉我是否有一种方法可以像在C#中一样在Java中初始化对象,如new Employee(){Name=“john”}

  • 本文向大家介绍iOS 在didSet中初始化属性,包括了iOS 在didSet中初始化属性的使用技巧和注意事项,需要的朋友参考一下 示例 也可以设置一个值并对其进行初始化:            

  • 我在做一个春靴项目。然后我尝试将mysql数据库连接到那个项目。我得到了名为“hikaripool-1-exception distry pool initialization”的错误。 这是整个StackTrace。