Spring Data JPA - 如何在检索后设置瞬态字段

时间:2016-05-20 08:03:14

标签: spring hibernate jpa spring-data spring-data-jpa

使用Spring Data JPA的JpaRepository方法获取实体后,例如findOnefindBy...等,我想知道自动执行某些自定义代码的最佳方法是什么,比如初始化一些瞬态字段。

换句话说,假设我有一个带有fullName瞬态字段的用户实体,应该在从数据库中取出后将其设置为firstNamelastName的串联,应该是什么我呢?

3 个答案:

答案 0 :(得分:3)

首先,如果您想要全名,只需编写一个动态连接forename / surname的方法。它不一定是一个领域。

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

public class MyEntity{

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

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

https://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Example_of_Entity_event_annotations

答案 1 :(得分:1)

我没有尝试过,但似乎@PostLoad注释可能会帮助您在从数据库中检索业务对象后执行代码来更改业务对象的状态。

但是在具体情况下,我只需创建一个方法getFullName,它连接firstName和secondName而不将值存储在bean中。

答案 2 :(得分:0)

您可以使用@Access(AccessType.Property)理想地设置瞬态字段。

您必须在setter方法上正常提及@Access(AccessType.Property),然后您可以在该setter方法中设置该瞬态字段的值。

或者对于存储库,您可以很好地编写JPQL这样的内容。

@Query(" SELECT new Hello(a.x * a.y,a.x,a.y)FROM Hello a WHERE t.value =:value")

然后在构造函数中使用transient variable

设置此a.x*a.y的值