gpt4 book ai didi

spring - 填充 Spring Data Jpa 存储库中的 @Transient 字段

转载 作者:行者123 更新时间:2023-12-02 03:47:09 26 4
gpt4 key购买 nike

是否可以使用 Spring Data REST api 以某种方式(通过投影或其他方式)填充实体类中的 transient 字段 - 以在 JSON 响应中获取该值?例如,我需要使用从第二个数据源获取的值填充 info 字段(我有该数据源的 Spring repo bean,需要将其注入(inject)“拦截器”之类的内容并填充该字段)。

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

@Transient
private String info;

// getters & setters
}

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

最佳答案

我使用 PostLoadEventListener 找到了解决方案,但它适用于 Hibernate,不完全是我想要的,但有效。我认为这应该是更通用的 Spring-ly 解决方案。

@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());
}
}

}

关于spring - 填充 Spring Data Jpa 存储库中的 @Transient 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46661581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com