Spring数据JPA-检索后如何设置瞬态字段

Spring数据JPA-检索后如何设置瞬态字段,spring,hibernate,jpa,spring-data,spring-data-jpa,Spring,Hibernate,Jpa,Spring Data,Spring Data Jpa,在使用Spring数据JPA的JpaRepository方法(例如findOne,findBy…)获取实体后,我想知道自动执行一些自定义代码的最佳方法是什么,比如初始化一些临时字段 换句话说,假设我有一个带有fullName临时字段的用户实体,从数据库中提取后,应该将其设置为firstName和lastName的串联,我该怎么办?您可以使用@Access(AccessType.Property)来理想地设置临时字段 您必须在setter方法上正常地提到@Access(AccessType.Pro

在使用Spring数据JPA的
JpaRepository
方法(例如
findOne
findBy…
)获取实体后,我想知道自动执行一些自定义代码的最佳方法是什么,比如初始化一些临时字段

换句话说,假设我有一个带有
fullName
临时字段的用户实体,从数据库中提取后,应该将其设置为
firstName
lastName
的串联,我该怎么办?

您可以使用
@Access(AccessType.Property)
来理想地设置临时字段

您必须在setter方法上正常地提到
@Access(AccessType.Property)
,然后您可以在该setter方法中设置该临时字段的值

或者,在存储库的情况下,您可以很好地编写类似这样的
JPQL

@查询(“从Hello a中选择新Hello(a.x*a.y,a.x,a.y),其中t.value=:value”)


然后在构造函数中,首先用
a.x*a.y

设置这个
瞬态变量的值,如果您想要全名,只需编写一个连接名字/姓氏的方法即可。它不一定是一个领域

如果确实需要对实体加载执行一些处理,请注册一个
@PostLoad
实体生命周期回调:

public class MyEntity{

     @PostLoad
     //invoked by framework on entity load.
     public void doStuff(){
         fullName =  forename + " " + surname;   
     }

     //alternative
     public String getFullName(){
         return forename + " " + surname;
     }

我自己还没有尝试过,但是注释似乎可以帮助您在从数据库检索业务对象后执行代码来更改其状态


但是在您的具体案例中,我只需要创建一个方法getFullName,它连接firstName和secondName,而不将值存储在bean中

谢谢,@PostLoad工作得很好。fullName只是一个例子——我会用它进行更长时间的初始化。