加载JPA实体的瞬态字段

加载JPA实体的瞬态字段,jpa,Jpa,我有一个实体,它有一个临时字段“limit”,我想在对另一个持久字段“rate”的值应用公式进行计算后加载它。加载实体时如何做到这一点 您可以使用JPA生命周期侦听器。您可以在实体内部或自己的类中定义侦听器回调方法 因为您想过滤来自数据库的数据,所以应该使用回调函数 最简单的方法是向实体类添加侦听器方法: @PostLoad public/protected void calcLimit() { // calculate limit } 方法不需要是公共的,除非您需要从其他类

我有一个实体,它有一个临时字段“limit”,我想在对另一个持久字段“rate”的值应用公式进行计算后加载它。加载实体时如何做到这一点

您可以使用JPA生命周期侦听器。您可以在实体内部或自己的类中定义侦听器回调方法

因为您想过滤来自数据库的数据,所以应该使用回调函数

最简单的方法是向实体类添加侦听器方法:

  @PostLoad
  public/protected void calcLimit() {
   // calculate limit
  }

方法不需要是公共的,除非您需要从其他类调用它`我是不是误解了医生?我有一个定义:
public@interface PostLoad
@Tassos因为它是一个回调方法,从其他类调用它会出现什么情况吗?我想它必须是公共的-这个回调总是从另一个类调用-JPA内部的一个触发回调的工具。实体本身不应调用此方法。JPA回调工具将属于与实体不同的包,因此受保护是不够的。@kostja注释
@PostLoad
是公共的;它注释的方法不必是公共的,因为JPA实现将使用反射调用它。通常,您可以保护实际方法,并在每个setter中调用它,以便计算值保持一致。有时您希望将此功能公开给其他类;例如,因为计算依赖于类外更改的值。