gpt4 book ai didi

java - 以编程方式在 JpaProperties 中添加 hibernate 拦截器 - Spring

转载 作者:行者123 更新时间:2023-11-30 05:41:41 24 4
gpt4 key购买 nike

我正在使用 Spring Boot 编写一个库,我需要通过它以编程方式插入一个 Hibernate 拦截器(因为我无法在库中使用 .properties )。

我想避免提供自己的 sessionFactory bean,我认为将这种可能性留给实现项目会很好,也使我免于手动扫描实体。

我的愚蠢想法是我可以将拦截器“注入(inject)”到JpaProperties中。这根本不起作用,它运行了@PostConstruct,但没有任何改变。我有一种感觉这行不通,但我想了解为什么,以及如何让它发挥作用。

@Autowired private JpaProperties properties;
@Autowired private MyInterceptor myInterceptor; //yep a bean

@PostConstruct public void add() {
((Map) properties.getProperties())
.put(
"hibernate.session_factory.interceptor",
myInterceptor
);
}

最佳答案

由于这是使用 @PostConstruct 注释,因此仅在 EntityManagerFactoryBuilder 已在 中创建之后才会添加到 JpaProperties >JpaBaseConfiguration。这意味着在此之后对属性映射的更改将不会出现在构建器中。

要自定义JpaProperties,您应该实例化一个添加配置的 bean,例如:

    @Primary
@Bean
public JpaProperties jpaProperties() {
JpaProperties properties = new JpaProperties();
properties.getProperties().put("hibernate.session_factory.interceptor", myInterceptor);
return properties;
}

然后,这将被注入(inject)到 HibernateJpaConfiguration 中,并在构造 EntityManagerFactoryBuilder 时使用。

关于java - 以编程方式在 JpaProperties 中添加 hibernate 拦截器 - Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55517742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com