Доступ к компонентам Spring в методе управляемого объекта Hibernate, отмеченном @PostLoad

Я хотел бы обогатить объект дополнительными данными о загрузке из БД внутри @PostLoad.

Как я могу получить доступ к управляемым компонентам Spring внутри метода @PostLoad?

Я использую уродливое решение со статическим аксессором:

@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 описана в разделе Доступ к компонентам Spring в статическом методе

Есть ли более идиоматическое решение/каркасный сахар?


person gavenkoa    schedule 10.04.2017    source источник


Ответы (1)


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

Разве вы не можете просто использовать JoinFormula и загружать данные стандартными инструментами? Просто напишите SQL, который извлекает данные для XType. В приведенном выше примере замените id на имя столбца свойства id (если оно отличается)

person StanislavL    schedule 10.04.2017