java - 通过 Spring 将字段注入(inject) Hibernate 加载的实体中

我正在寻找一种通过 Spring 在由 Hibernate 从数据库加载的 bean 中注入(inject)某些属性的方法。

例如

class Student {
   int id; //loaded from DB
   String name; //loaded from DB
   int injectedProperty; //Inject via Spring
}

我可以配置 Spring 以便每当 Hibernate 创建类 Student 的对象时,在某些 applicationContext 文件中定义的一些属性被注入(inject)到对象创建中?

最佳答案

而 the aspectj way有效,我想说标准的 spring/hibernate 方法是注册一个 LoadEventListener (在 hibernate core reference、spring reference 和 this thread 中了解更多信息)

这里是 spring sessionfactory bean 定义的一个片段

<bean id="mySessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    ...
    <property name="eventListeners">
        <map>
            <entry key="post-load">
                <bean class="com.foo.spring.MyLoadListener"></bean>
            </entry>
        </map>
    </property>
</bean>

这里是 LoadEventListener:

public class MyLoadListener implements LoadEventListener{

    public void setSpringManagedProperty(String springManagedProperty){
        this.springManagedProperty = springManagedProperty;
    }
    private String springManagedProperty;

    @Override
    public void onLoad(LoadEvent event, LoadType loadType) throws HibernateException{
        if(MyEntity.class.getName().equals(event.getEntityClassName())){
            MyEntity entity = (MyEntity) event.getInstanceToLoad();
            entity.setMyCustomProperty(springManagedProperty);
        }

    }

}

看妈妈,不需要任何方面。

https://stackoverflow.com/questions/3505421/

相关文章:

java - Spring 的 JdbcTemplate 和事务

spring - 不使用 Maven 下载 Spring Jars

spring - 如何在 Thymeleaf 和 Spring Boot 中显示消息?

java - 是否可以在构造函数上使用@Resource?

java - Spring MVC 示例 Web 应用程序

json - Spring REST 服务 : retrieving JSON from Reque

mysql - spring jpa application.properties useSSL

java - Spring Redis - 从 application.properties 文件中

performance - ORM 解决方案(JPA;Hibernate)与 JDBC

java - RestTemplate 不转义 url