lucene - Using Hibernate Search over 2 subclasess with a shared property -


i have following data model:

@entity @inheritance(strategy = inheritancetype.table_per_class) public abstract class abstractrecord     implements serializable {     ...     @id     @generatedvalue(strategy = generationtype.table)     @column(name = "id", nullable = false)     @documentid     private integer id;     ...  } 

@entity @inheritance(strategy = inheritancetype.table_per_class) @namedqueries(...) }) public abstract class abstractentrydetail     extends abstractrecord     implements serializable { ... } 

@indexed(index = "entrydetailindex") @entity @table(name = "nacha_entry_detail") @namedqueries(...) }) public class entrydetail     extends abstractentrydetail     implements serializable {     ...     @field(index = index.tokenized, store = store.no)     @column(name = "receiver_name", nullable = false)     private string receivername;     ... 

}

@indexed(index = "entrydetailctxindex") @entity @table(name = "nacha_entry_detail_ctx") @namedqueries(...) public class entrydetailctx     extends abstractentrydetail     implements serializable {     ...     @field(index = index.tokenized, store = store.no)     @column(name = "receiver_name", nullable = false)     private string receivername;     ... } 

as can see, entrydetail , entrydetailctx share same property "receivername", having problem when searching value "individualname1" through following code:

@stateless @transactionattribute(transactionattributetype.mandatory) @rolesallowed({permissionutil.search_list,     permissionutil.lucene_index }) public class searchfacade {     ...     @rolesallowed(permissionutil.search_list)     @transactionattribute(transactionattributetype.required)     public list<abstractrecord> dosearch(string stringtofind)     {         list<abstractrecord> result = null;          // test search specific values of abstract record         // aim return number of retreived results         entitymanager em = emf.createentitymanager();         fulltextentitymanager fulltextentitymanager =             org.hibernate.search.jpa.search.getfulltextentitymanager(em);         string[] fields =             // fields reviewed             new string[]             {   ....,"receivername",....              };          //create multi-field lucene query         standardanalyzer stdanalyzer = new standardanalyzer(version.lucene_30);         multifieldqueryparser parser =             new multifieldqueryparser(version.lucene_30, fields, stdanalyzer);         org.apache.lucene.search.query query = null;          try         {             query = parser.parse(stringtofind);         }         catch (parseexception ex)         {             logger.getlogger(searchfacade.class.getname()).log(level.severe, null, ex);         }          long time1 = system.currenttimemillis();          // wrap lucene query in javax.persistence.query         javax.persistence.query persistencequery =             fulltextentitymanager.createfulltextquery(query);         // execute search         //having problems here         result = (list<abstractrecord>) persistencequery.getresultlist();          long time2 = system.currenttimemillis();         logger.getlogger(searchfacade.class.getname())               .log(             level.finer, "hibernate search execution time: {0}",             long.tostring(time2 - time1));          //em.gettransaction().commit();         em.close();          return result;     } 

so after indexing entities , trying perform search on "receivername" shared on data base, "jhon" following exception..

caused by: org.hibernate.wrongclassexception: object id: 1 not of specified subclass: com.xxx.ejb.core.entity.nacha.entrydetailctx (loaded object of wrong class class com.xxx.ejb.core.entity.nacha.entrydetail)     @ org.hibernate.loader.loader.instancealreadyloaded(loader.java:1391)     @ org.hibernate.loader.loader.getrow(loader.java:1344)     @ org.hibernate.loader.loader.getrowfromresultset(loader.java:611)     @ org.hibernate.loader.loader.doquery(loader.java:829)     @ org.hibernate.loader.loader.doqueryandinitializenonlazycollections(loader.java:274)     @ org.hibernate.loader.loader.dolist(loader.java:2533)     @ org.hibernate.loader.loader.listignorequerycache(loader.java:2276)     @ org.hibernate.loader.loader.list(loader.java:2271)     @ org.hibernate.loader.criteria.criterialoader.list(criterialoader.java:119)     @ org.hibernate.impl.sessionimpl.list(sessionimpl.java:1716)     @ org.hibernate.impl.criteriaimpl.list(criteriaimpl.java:347)     @ org.hibernate.search.engine.objectloaderhelper.initializeobjects(objectloaderhelper.java:116)     @ org.hibernate.search.engine.multiclassesqueryloader.executeload(multiclassesqueryloader.java:124)     @ org.hibernate.search.engine.abstractloader.load(abstractloader.java:70)     @ org.hibernate.search.query.fulltextqueryimpl.list(fulltextqueryimpl.java:317)     @ org.hibernate.search.jpa.impl.fulltextqueryimpl.getresultlist(fulltextqueryimpl.java:137)     @ com.paysett.ejb.core.facade.searchfacade.dosearch(searchfacade.java:130)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:616)     @ org.glassfish.ejb.security.application.ejbsecuritymanager.runmethod(ejbsecuritymanager.java:1056)     @ org.glassfish.ejb.security.application.ejbsecuritymanager.invoke(ejbsecuritymanager.java:1128)     @ com.sun.ejb.containers.basecontainer.invokebeanmethod(basecontainer.java:5292)     @ com.sun.ejb.ejbinvocation.invokebeanmethod(ejbinvocation.java:615)     @ com.sun.ejb.containers.interceptors.aroundinvokechainimpl.invokenext(interceptormanager.java:797)     @ com.sun.ejb.ejbinvocation.proceed(ejbinvocation.java:567)     @ com.sun.ejb.containers.interceptors.systeminterceptorproxy.doaround(systeminterceptorproxy.java:157)     @ com.sun.ejb.containers.interceptors.systeminterceptorproxy.aroundinvoke(systeminterceptorproxy.java:139)     @ sun.reflect.generatedmethodaccessor525.invoke(unknown source)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:616)     @ com.sun.ejb.containers.interceptors.aroundinvokeinterceptor.intercept(interceptormanager.java:858)     @ com.sun.ejb.containers.interceptors.aroundinvokechainimpl.invokenext(interceptormanager.java:797)     @ com.sun.ejb.containers.interceptors.interceptormanager.intercept(interceptormanager.java:367)     @ com.sun.ejb.containers.basecontainer.__intercept(basecontainer.java:5264)     @ com.sun.ejb.containers.basecontainer.intercept(basecontainer.java:5252)     @ com.sun.ejb.containers.ejblocalobjectinvocationhandler.invoke(ejblocalobjectinvocationhandler.java:190)     ... 52 more 

i have read throughly many hibernate search forums , hibernate search in action book without positive results, ca light me ideas or possible solutions problem? thanks

edit: found out problem entrydetail , entrydetailctx both can have same id's (because both on different tables..) since @documentid inherited abstractrecord can duplicated in both tables @ search execution time generates problem... have additional problem , following:

@entity @inheritance(strategy = inheritancetype.table_per_class) public abstract class abstractrecord     implements serializable {     //~ instance variables --------------------------------------------------------------- /** serialid */ public static final string serialid = "hyzmfgswl5hsdbxziitnilmt2/eipyjerjcqimun3/pvy3sbbiqie4k9llnl450bhwl8enumyc+wrhgztubtdg9/yuuj+ni/fradrgzty7urqi7opbryryehduwj3hg9";     /** id record. */     @id     @generatedvalue(strategy = generationtype.table)     @column(name = "id", nullable = false)     private integer id;      /** line number record. */     @field(index=index.un_tokenized, store=store.no)     @column(name = "record_number", nullable = false)     private integer recordnumber;      /** record types record. */     @field(index=index.un_tokenized, store=store.no)     @column(name = "record_type", nullable = false)     private integer recordtype;      /** current status record. */     @field(index=index.un_tokenized, store=store.no)     @column(name = "record_status", nullable = false)     @enumerated(enumtype.ordinal)     private recordstatus recordstatus;      /** unique table key file. */     @field(index=index.un_tokenized, store=store.no)     @column(name = "unique_table_key", nullable = false)     private string uniquetablekey;      ... } 

i need uniquetablekey , recordnumber new @documentid's search, hibernate search allows 1 documentid, help?

possible solutions problem following: embeededid , idclass

and annotating @documentid of above chosen solutions


Comments

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -