Author: epbernard
Date: 2008-02-10 14:58:01 -0500 (Sun, 10 Feb 2008)
New Revision: 14326
Modified:
search/trunk/src/java/org/hibernate/search/event/FullTextIndexCollectionEventListener.java
search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
Log:
HSEARCH-56
Modified:
search/trunk/src/java/org/hibernate/search/event/FullTextIndexCollectionEventListener.java
===================================================================
---
search/trunk/src/java/org/hibernate/search/event/FullTextIndexCollectionEventListener.java 2008-02-10
19:56:04 UTC (rev 14325)
+++
search/trunk/src/java/org/hibernate/search/event/FullTextIndexCollectionEventListener.java 2008-02-10
19:58:01 UTC (rev 14326)
@@ -10,7 +10,11 @@
import org.hibernate.event.PostCollectionRemoveEvent;
import org.hibernate.event.PostCollectionUpdateEvent;
import org.hibernate.event.AbstractEvent;
+import org.hibernate.event.AbstractCollectionEvent;
import org.hibernate.search.backend.WorkType;
+import org.hibernate.engine.EntityEntry;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
* Support collection event listening (starts from hibernate core 3.2.6)
@@ -22,28 +26,45 @@
implements PostCollectionRecreateEventListener,
PostCollectionRemoveEventListener,
PostCollectionUpdateEventListener {
+ private static Log log = LogFactory.getLog( FullTextIndexCollectionEventListener.class
);
+
public void onPostRecreateCollection(PostCollectionRecreateEvent event) {
- Object entity = event.getAffectedOwner();
+ processCollectionEvent( event );
+ }
+
+ private void processCollectionEvent(AbstractCollectionEvent event) {
+ Object entity = event.getAffectedOwnerOrNull();
+ if ( entity == null ) {
+ //Hibernate cannot determine every single time the owner especially incase detached
objects are involved
+ // or property-ref is used
+ //Should log really but we don't know if we're interested in this collection
for indexing
+ return;
+ }
if ( used && searchFactoryImplementor.getDocumentBuilders().containsKey(
entity.getClass() ) ) {
- processWork( entity, getId( entity, event ), WorkType.COLLECTION, event );
+ Serializable id = getId( entity, event );
+ if (id == null) {
+ log.warn( "Unable to reindex entity on collection change, id cannot be
extracted: " + event.getAffectedOwnerEntityName() );
+ return;
+ }
+ processWork( entity, id, WorkType.COLLECTION, event );
}
}
- private Serializable getId(Object entity, AbstractEvent event) {
- return event.getSession().getPersistenceContext().getEntry( entity ).getId();
+ private Serializable getId(Object entity, AbstractCollectionEvent event) {
+ Serializable id = event.getAffectedOwnerIdOrNull();
+ if ( id == null ) {
+ //most likely this recovery is unnecessary since Hibernate Core probably try that
+ EntityEntry entityEntry = event.getSession().getPersistenceContext().getEntry( entity
);
+ id = entityEntry == null ? null : entityEntry.getId();
+ }
+ return id;
}
public void onPostRemoveCollection(PostCollectionRemoveEvent event) {
- Object entity = event.getAffectedOwner();
- if ( used && searchFactoryImplementor.getDocumentBuilders().containsKey(
entity.getClass() ) ) {
- processWork( entity, getId( entity, event ), WorkType.COLLECTION, event );
- }
+ processCollectionEvent( event );
}
public void onPostUpdateCollection(PostCollectionUpdateEvent event) {
- Object entity = event.getAffectedOwner();
- if ( used && searchFactoryImplementor.getDocumentBuilders().containsKey(
entity.getClass() ) ) {
- processWork( entity, getId( entity, event ), WorkType.COLLECTION, event );
- }
+ processCollectionEvent( event );
}
}
Modified: search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java 2008-02-10
19:56:04 UTC (rev 14325)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java 2008-02-10
19:58:01 UTC (rev 14326)
@@ -152,7 +152,7 @@
}
- public void testIndexedEmbeddedAndCollectionsFailureExpected() throws Exception {
+ public void testIndexedEmbeddedAndCollections() throws Exception {
Author a = new Author();
a.setName( "Voltaire" );
Author a2 = new Author();
@@ -238,9 +238,9 @@
protected void configure(org.hibernate.cfg.Configuration cfg) {
super.configure( cfg );
FullTextIndexCollectionEventListener del = new FullTextIndexCollectionEventListener();
- cfg.getEventListeners().setPostCollectionRecreateEventListeners( new
PostCollectionRecreateEventListener[]{del} );
- cfg.getEventListeners().setPostCollectionUpdateEventListeners( new
PostCollectionUpdateEventListener[]{del} );
- cfg.getEventListeners().setPostCollectionRemoveEventListeners( new
PostCollectionRemoveEventListener[]{del} );
+ //cfg.getEventListeners().setPostCollectionRecreateEventListeners( new
PostCollectionRecreateEventListener[]{del} );
+ //cfg.getEventListeners().setPostCollectionUpdateEventListeners( new
PostCollectionUpdateEventListener[]{del} );
+ //cfg.getEventListeners().setPostCollectionRemoveEventListeners( new
PostCollectionRemoveEventListener[]{del} );
}
protected Class[] getMappings() {
Show replies by date