Ich verwende JPA-2.0 mit Hibernate in meiner Datenzugriffsschicht.Den Entity Manager von JPA in den EmptyInterceptor von Hibernate einfügen
Für Audit-Protokollierung, ich bin mit EmptyInterceptor des Hibernate von unten Eigenschaft in persistence.xml konfigurieren:
<property name="hibernate.ejb.interceptor"
value="com.mycom.audit.AuditLogInterceptor" />
Wo AuditLogInterceptor erstreckt Hibernate 'org.hibernate.EmptyInterceptor'.
Ich verwende JPA-Entity-Manager in Datenzugriffsebene, um Datenbankvorgänge durchzuführen. JPA-Konfiguration ist wie folgt:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:persistenceUnitName="PersistenceUnit"
p:persistenceXmlLocation="classpath*:persistence.xml"
p:dataSource-ref="dataSource" p:jpaVendorAdapter-ref="jpaAdapter">
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
</bean>
Mein AbstractDAO ist:
public class AbstractDao<T, ID extends Serializable> {
private final transient Class<T> persistentClass;
protected transient EntityManager entityManager;
@SuppressWarnings("unchecked")
public AbstractDao() {
this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
@PersistenceContext
public final void setEntityManager(final EntityManager entityMgrToSet) {
this.entityManager = entityMgrToSet;
}
public final Class<T> getPersistentClass() {
return persistentClass;
}
public final void persist(final T entity) {
entityManager.persist(entity);
}
}
Ich möchte JPA Entity-Manager in 'AuditLogInterceptor' injizieren, so dass ich Datenbankoperationen in 'AuditLogInterceptor' durchführen kann, wie mein abstrakte DAO.
Irgendeine Idee? Was sollte die richtige Lösung sein?
Was ist mit Gewindesicherheit? –
Ich versuche es in JPA2 zu tun, um einen Verweis auf mein auditLogRepository zu erhalten, da die @Resource-Annotation nichts injiziert hat und mir eine NPE hinterlassen hat. – Stephane