Return empty result list - Composed primary key - lucene search ok - primary key bridge ok
Description
Attachments
Activity

Gaël Saunier April 2, 2010 at 5:40 PM
I've just try the latest versions
and bug is fixed
tested version :
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search</artifactId>
<version>3.2.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.5.0-Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.0-Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.5.0-Final</version>
</dependency>

Gaël Saunier March 29, 2010 at 5:23 PM
In ObjectLoaderHelper.initializeObjects(...) :
disjunction.add( Restrictions.in( idName, ids ) ); //Restrictions.in( idName, ids ).toString() => entityPK in (test.persistant.EntityPK@512265, test.persistant.EntityPK@512328)
criteria.add( disjunction );
criteria.list(); //load all objects => return empty list

Gaël Saunier March 29, 2010 at 4:47 PM
problem is in : (v 3.1.1 GA)
Class FullTextQueryImpl
public List list() throws HibernateException {
...
Loader loader = getLoader();
List list = loader.load( infos.toArray( new EntityInfo[infos.size()] ) );
..
}
Loading isn't executed correctly.
return empty list

Gaël Saunier March 29, 2010 at 1:29 PM
A simple test project with this bug.
Change test query to be convinced.
Entity :
@Indexed
@Entity
public class Demande extends DemandeEntity {
...
Superclass :
...
@MappedSuperclass
public class DemandeEntity implements Serializable {
...
@FieldBridge(impl=Demande_DocumentId_Bridge.class)
@DocumentId
@IndexedEmbedded
private DemandePK demandePK;
...
Bridge :
...
public class Demande_DocumentId_Bridge implements TwoWayStringBridge {
...
public Object stringToObject(String arg0) {
String[] tab = arg0.split("þ");
return new DemandePK(tab[0],tab[1],tab[2]);
}
...
public String objectToString(Object arg0) {
DemandePK d = (DemandePK)arg0;
return d.getUiPhar()"þ"+d.getRdes()"þ"+d.getTypeDem();
}
}
TestClass :
...
public static void main(String[] args) {
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("META-INF/PostGreSQL-applicationContext.xml");
GenericSearchManagerMetier demandeSearchManagerMetier = (GenericSearchManagerMetier) appContext.getBean("demandeSearchManagerMetier");
String rqt = "+text:jean +text:francois";
BeanLuceneQuery beanLuceneQuery = new BeanLuceneQuery(rqt);
BeanResultats br = null;
try {
br = demandeSearchManagerMetier.searchLuceneQuery(beanLuceneQuery,0,15);
} catch (NegativeOrNullInteger e) {
e.printStackTrace();
}
System.out.print("Nb total : "br.getNbTotalResults()"\n");
System.out.print("Nb Résultats : "br.getResults().size()"\n");
}
Lucene part of process is alright !
Primary keys DemandePK generated by HS just before requesting DB are alright
but no return...
br.getNbTotalResults() return 16
but
br.getResults().size() return 0
Beans are correctly implemented.
I traced return of :
List<T> resultList = q.getResultList();
but list size = 0
stdout :
...
Hibernate: select this_ (..xxx..) from Demande this_ where ((this_.RDES, this_.TYPE_DEM, this_.UI_PHAR) in ((?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?)))
Nb total : 16
Nb Résultats : 0