2017-10-10 75 views
3

是否可以使用Spring Data REST API以某种方式填充实体类中的瞬态字段(通过投影或其他方式) - 在JSON响应中获取该值?我需要填充例如info字段与从第二个数据源得到的值(我有这个数据源的春回购bean,并需要注入像“拦截器”,并填写该字段)。在Spring Data Jpa Repository中填充@Transient字段

@Entity 
public class User { 
    @Id 
    private Long id; 

    @Transient 
    private String info; 

    // getters & setters 
} 

public interface UserRepository extends JpaRepository<User, Long> { 
} 
+0

你想如何填充它?暂时的意味着它只会在数据库中不存在,但该字段仍然可用 – ricol070

回答

1

我发现使用PostLoadEventListener的解决方案,但它是休眠,不正是我一直在寻找,但工作。我认为这应该是更一般的春季解决方案。

@Component 
public class UserInterceptor implements PostLoadEventListener { 

    @Autowired 
    private SecondRepository repo; 

    @Autowired 
    @Qualifier("prmiaryEntityManagerFactory") 
    private EntityManagerFactory entityManagerFactory; 

    @PostConstruct 
    private void init() { 
     HibernateEntityManagerFactory hibernateEntityManagerFactory = (HibernateEntityManagerFactory) this.entityManagerFactory; 
     SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl) hibernateEntityManagerFactory.getSessionFactory(); 
     EventListenerRegistry registry = sessionFactoryImpl.getServiceRegistry().getService(EventListenerRegistry.class); 
     registry.appendListeners(EventType.POST_LOAD, this); 
    } 

    @Override 
    public void onPostLoad(PostLoadEvent event) { 
     final Object entity = event.getEntity(); 
     if(entity != null && entity instanceof User) { 
      User user = (User) entity; 

      // populate using another repo bean 
      Info s = repo.findOne(user.getInfoId()); 
      user.setInfo(s.getName()); 
     } 
    } 

} 
相关问题