[hibernate-issues] [Hibernate-JIRA] Updated: (HSEARCH-349) Allow custom Loader in FullTextQueryImpl

Emmanuel Bernard (JIRA) noreply at atlassian.com
Thu Jan 27 09:38:05 EST 2011


     [ http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-349?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Emmanuel Bernard updated HSEARCH-349:
-------------------------------------

    Fix Version/s: 3.4.0

I think I'll be able to offer that alongside the ability to load objects from the second level cache

> Allow custom Loader in FullTextQueryImpl
> ----------------------------------------
>
>                 Key: HSEARCH-349
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-349
>             Project: Hibernate Search
>          Issue Type: New Feature
>          Components: query
>    Affects Versions: 3.1.0.GA
>         Environment: Hibernate 3.3.1.GA, DB2
>            Reporter: Julien Kronegg
>            Priority: Minor
>             Fix For: 3.4.0
>
>   Original Estimate: 3h
>  Remaining Estimate: 3h
>
> When doing an native SQL query containing join and other complicated stuff, one can get a List<MyObject> using the following code:
>     List<MyObject> list = entityManager.createNativeQuery("SELECT ...", MyObject.class).getResultList();
> The MyObject class is an JPA Entity, but is not connected to a database table: the MyObject instance is reconstructed automatically by mapping the ResultSet column names and the MyObject field names.
> This object list can be indexed using Hibernate Search (by adding @Indexed and @Field annotations to the MyObject entity). When doing an Hibernate Search query, the FullTextQueryImpl.list() method uses a Loader which try to load the MyObject entities from the database by a query such as "SELECT ... FROM MYOBJECT where id in (?,?,?,..)" (where the list of "?" is the list of identifiers returned by Lucene). 
> Here, we have a problem: the MYOBJECT table does not exist and obviously an exception is raised. The desired result would be for example to look into the initial List<MyObject> "list" instead of asking to the database.
> This functionnality could be done very simply by adding a "Loader customLoader" field (with its public getter/setter) in the org.hibernate.search.query.FullTextQueryImpl class and by modifying the getLoader() method such as:
>     private Loader getLoader(Session session, SessionFactoryImplementor sessionFactoryImplementor) {
>         if (customLoader!=null) {
>             customLoader.init(session, sessionFactoryImplementor);
>             return customLoader;
>         }
>         ...
>     }
> After this modification, the programmer can design its own Loader which implements whatever loading strategy.  For the example above, the Loader.load(EntityInfo[]) method may looks for each EntityInfo.id in the initially obtained List<MyObject> "list".
> There is a workaround: copy the full source code of FullTextQueryImpl and add the described modifications. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list