我想通过@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
访问权限的相应构思
是否有更多惯用的解决方案/框架糖?
答案 0 :(得分:2)
@OneToMany
@JoinFormula(value = "SELECT * FROM xTypeTable xt WHERE xt.carId = id")
private List<XType> pastArticles;
您是否只使用JoinFormula并使用标准工具加载数据?只需编写用于检索XType数据的SQL。在上面的示例中,将id替换为id属性的列名称(如果它不同)