2017-10-10 77 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()); 
     } 
    } 

} 
相關問題