在 Hibernate 托管实体方法中访问 Spring bean,该方法由 @PostLoad 标记



我想用从 @PostLoad 内部的数据库加载的其他数据来丰富实体。

如何在方法@PostLoad访问 Spring 管理的豆子?

我使用带有静态访问器的丑陋解决方案:

@Service
public class StaticApplicationContext implements ApplicationContextAware {
    private static ApplicationContext ctx = null;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        ctx = applicationContext;
    }
    public static ApplicationContext getApplicationContext() {
        return ctx;
    }
}
@Entity
public class Car {
    @Id
    private Long id;
    ...
    @Transient
    private List<XType> details;
    @PostLoad
    private void onLoad() {
         XTypeRepository repo = StaticApplicationContext.getCtx()
                .getBean(XTypeRepository.class) ;
         this.details = repo.findByCarId(this.id);
    }
}

静态方法中访问春豆中描述的static访问的相应想法

还有更惯用的溶液/框架糖吗?

@OneToMany
@JoinFormula(value = "SELECT * FROM xTypeTable xt WHERE xt.carId = id") 
private List<XType> pastArticles;

您不能只使用JoinFormula并使用标准工具加载数据吗?只需编写SQL即可为XType检索数据。在上面的示例中,将 id 替换为 id 属性的列名(如果不同(

相关内容

最新更新