Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在由@PostLoad标记的Hibernate托管实体方法中访问Springbean_Spring_Hibernate_Postconstruct - Fatal编程技术网

在由@PostLoad标记的Hibernate托管实体方法中访问Springbean

在由@PostLoad标记的Hibernate托管实体方法中访问Springbean,spring,hibernate,postconstruct,Spring,Hibernate,Postconstruct,我想用从DB inside@PostLoad加载的附加数据来丰富实体 如何在@PostLoad方法中访问Spring管理的bean 我使用带静态访问器的丑陋解决方案: @Service public class StaticApplicationContext implements ApplicationContextAware { private static ApplicationContext ctx = null; @Override public void s

我想用从DB inside
@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);
    }
}
@服务
公共类StaticApplicationContext实现ApplicationContextAware{
私有静态应用程序上下文ctx=null;
@凌驾
public void setApplicationContext(ApplicationContext ApplicationContext)抛出BeansException{
ctx=应用上下文;
}
公共静态应用程序上下文getApplicationContext(){
返回ctx;
}
}
@实体
公车{
@身份证
私人长id;
...
@短暂的
私人名单详情;
@后装
私有void onLoad(){
XTypeRepository repo=StaticApplicationContext.getCtx()
.getBean(XTypeRepository.class);
this.details=repo.findbycard(this.id);
}
}
中所述的
静态访问的相应概念

还有更多惯用的解决方案/框架糖吗?

@OneToMany
@OneToMany
@JoinFormula(value = "SELECT * FROM xTypeTable xt WHERE xt.carId = id") 
private List<XType> pastArticles;
@JoinFormula(value=“从xTypeTable xt中选择*,其中xt.carId=id”) 私人物品清单;
你不能仅仅使用JoinFormula并用标准工具加载数据吗?只需编写检索XType数据的SQL。在上面的示例中,将id替换为id属性的列名(如果不同)