在由@PostLoad

时间:2017-04-10 14:23:18

标签: spring hibernate postconstruct

我想通过@PostLoad内的数据库加载额外数据来丰富实体。

如何在@PostLoad方法中访问Spring托管bean?

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

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

Accessing spring beans in static method

中描述的static访问权限的相应构思

是否有更多惯用的解决方案/框架糖?

1 个答案:

答案 0 :(得分:2)

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

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