我有一个简单的问题。是否可以通过@Ressource或@Autowired向Hibernate Eventlistener添加依赖项注入?
我将向您展示我的entitymanagerfactory配置:
<bean id="entityManagerFactory" class="org.hibernate.ejb.EntityManagerFactoryImpl">
<qualifier value="entityManagerFactory" />
<constructor-arg>
<bean
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitManager">
<bean
class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManagerr">
<property name="defaultDataSource" ref="dataSource" />
</bean>
</property>
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="mis" />
<property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence" />
<property name="jpaProperties" ref="jpa.properties" />
<property name="jpaDialect" ref="jpaDialect" />
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="true" />
<property name="database">
<util:constant
static-field="org.springframework.orm.jpa.vendor.Database.POSTGRESQL" />
</property>
<property name="showSql" value="true" />
</bean>
</property>
</bean>
</constructor-arg>
</bean>
目前,我通过jpa.properties注册了我的监听器,
hibernate.ejb.event.load=com.example.hibernate.events.LoadEvent
但是在这种情况下,我的听众没有弹簧注入。我找到了一个解决方案,但是它使用了sessionFactory而不是objectmanager
oder我可以在我的上下文中修改sessionfactory吗?希望有人有一个好主意或解决方案如何解决这个问题!
太谢谢了!
如果您使用SessionFactory,则将是以下配置:
<bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- Stripped other stuff -->
<property name="eventListeners">
<map>
<entry key="pre-load">
<bean class="com.mycompany.MyCustomHibernateEventListener1" />
</entry>
<entry key="pre-persist">
<bean class="com.mycompany.MyCustomHibernateEventListener2" />
</entry>
</map>
</property>
</bean>
但是由于您使用的是JPA,因此恐怕您需要使用此线程中概述的AOP
或者你可以
基类:
public abstract class ListenerBase{
protected void wireMe(){
ApplicationContext ctx = ContextHelper.getCurrentApplicationContext();
ctx.getAutowireCapableBeanFactory().autowireBean(this);
}
}
现在在您的lifycycle方法中wireMe()
先调用。
更新:
这是一个示例实现ContextHelper
:
public final class ContextHelper implements ApplicationContextAware{
private static final ContextHelper INSTANCE = new ContextHelper();
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(final ApplicationContext applicationContext){
this.applicationContext = applicationContext;
}
public static ApplicationContext getCurrentApplicationContext(){
return INSTANCE.applicationContext;
};
public static ContextHelper getInstance(){
return INSTANCE;
}
private ContextHelper(){
}
}
将其连接到您的Spring Bean配置中,如下所示:
<bean class="com.mycompany.ContextHelper" factory-method="getInstance" />
问题内容: 我已经使用和事件监听器插入创建日期和表更新的日期。 我面临的问题是,当我将实体保存在数据库中的创建日期无法与在更新记录时插入更新日期相同的表中插入时,它也不会插入更新日期。 我的代码示例如下所示: 侦听器类别: hibernate连接类: DAO中的实体保存和更新方法: 我的测试班: 如果我使用的话,它将插入创建和更新的日期,但是每次我调用flush方法时都会执行更新的查询。目前,我评
问题内容: 我有一个包含三个字段的表,例如a,b,c。我想添加一个约束,以确保如果a不为null,那么b和c也不为null。我已经使用以下SQL做到了 有没有一种方法可以使用hibernate注释@Check达到相同的效果? 我找不到带有该注释的有用示例,开发人员是否倾向于完全不使用它? 问题答案: 是的,可以在类级别使用,例如: (请注意,我使用@jarlh注释重写了您的情况。)该条款注释需要参
问题内容: 休眠注释应该放在哪里? 它是我的实例变量上方的线吗?还是在吸气剂之前?还是在二传手之前?还是真的不重要吗? 非常感谢 问题答案: 您可以将它们放在 野外 或 吸气剂上 。从《 Hibernate注释参考指南》中: 2.2.1。将POJO标记为持久实体 (…) 根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性。EJB3规范要求您在将要访问的元素类型上声明注释,即,
问题内容: 有一个结构。我想以这种方式链接这三个实体:公司应包含ID,公司名称和部门列表,每个部门都有一个工人列表,ID和部门名称。每个工人都有名字,身份证。 我试图与一对多和多对一建立联系,但未成功。 公司 部门 工人 我从开始: 它填充公司,但不填充其他表,也没有创建任何联接(映射)错误: 问题答案: 除了Glenn Lane的答案中提到的级联,您还需要了解双向关联是如何工作的。 它们有一个所
问题内容: 任何人都知道一些有关如何为hibernate创建自定义ID生成器的好教程吗? 问题答案: 在Google上粗略搜索“hibernate自定义ID生成器教程”,发现了以下可能性。我排除了那些看起来没有用的内容,并总结了它们的内容。 http://www.devx.com/Java/Article/30396-涵盖了在数据保留之前生成ID(因此还没有业务密钥)的问题。 http://doc
主要内容:监听器的分类,监听对象创建和销毁的监听器,监听属性变更的监听器,监听 Session 中对象状态改变的监听器,注册监听器监听器 Listener 是一个实现特定接口的 Java 程序,这个程序专门用于监听另一个 Java 对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即自动执行。 监听器的相关概念: 事件:方法调用、属性改变、状态改变等。 事件源:被监听的对象( 例如:request、session、servletContext)。 监听器:用于监听事件源对象