2010-11-02 7 views
0

Можно ли использовать спящий режим с использованием спящего режима, но без jpa. Я использую только аннотацию jpa, но я не использую entityManager.Hibernate-search with hibernate

В этом случае, как поиск в спящем режиме может знать, что он должен индексировать объект, когда я создаю новый объект в db, используя сеанс спящего режима.

До сих пор у меня только лицо, называемое «человек». Я добавил @indexed к этому сущности, и теперь я больше не могу обновлять сущность человека в базе данных. При вызове session.flush при транзакции, которая обновляет этот объект, возникает исключение.

thx много.


Вот что я сделал до сих пор,

Я добавил к hibernate.cfg.xml:

<property name="hibernate.search.default.directory_provider"> 
    org.hibernate.search.store.FSDirectoryProvider 
    </property> 
    <property name="hibernate.search.default.indexBase">./lucene/indexes</property> 
    <property name="hibernate.search.default.batch.merge_factor">10</property> 
    <property name="hibernate.search.default.batch.max_buffered_docs">10</property> 

    <event type="post-update"> 
     <listener class="org.hibernate.search.event.FullTextIndexEventListener"/> 
    </event> 
    <event type="post-insert"> 
     <listener class="org.hibernate.search.event.FullTextIndexEventListener"/> 
    </event> 
    <event type="post-delete"> 
     <listener class="org.hibernate.search.event.FullTextIndexEventListener"/> 
    </event> 

давайте предположим следующую "версию" сущность:

@Entity 
@Indexed(index="indexes/versions") 
@Table(name="VERSIONS") 
public class Version implements Serializable { 

    @Id 
    @DocumentId 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="V_NO", length=10) 
    private Integer valueNb; 

    @Column(nullable=false) 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date tstamp; 

Это метод, который сохраняет версию:

private Version performUpdateActualOnCreation(Session session, VersionedObject storedObject, String userId, String message) { 
    // create new version 
    Version version = new Version(userId, message); 
    session.save(version); 

    // update previous version do the object with the Next Value NB 
    if (storedObject != null) { 
     storedObject.setNextVersion(version); 
     session.update(storedObject); 
    } else { 
     logger.error("Error: trying to update versioned object which has no previous version!!"); 
    } 

    session.flush(); 

    return version; 
    } 

Проблема возникает с session.flush(); Вот StackTrace, но я не вижу ничего inthere .: (я могу также видеть, что индексный файл создается «индексов/версии», но он пуст)

DEBUG 2010-11-02 17:26:33,368+0100 http-8889-Processor6 com.data.server.dao.impl.HibernateDao.rollbackTransaction(HibernateDao.java:104) Rolling back Hibernate transaction 
com.google.gwt.user.client.rpc.StatusCodeException: The call failed on the server; see server log for details 
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:192) 
    at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:287) 
    at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:393) 
    at sun.reflect.GeneratedMethodAccessor50.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) 
    at com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:1713) 
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:165) 
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264) 
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) 
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java) 
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:188) 
    at sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) 
    at com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:1668) 
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:401) 
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222) 
    at java.lang.Thread.run(Thread.java:619) 
+0

Пожалуйста, измените версию спящего режима 3.1.1 GA –

ответ

1

Согласно Hibernate Search Documentation:

Если вы используете Hibernate напрямую, это можно сделать с помощью hibernate.properties или hibernate.cfg.xml. Если вы используете Hibernate через JPA, вы также можете добавить свойства к persistence.xml.

Вы можете использовать Hibernate Search в любом случае. Нужно ли использовать аннотации JPA или вы можете переключиться на аннотации Hibernate? Чтобы получить дополнительную помощь в своем исключении, вы должны опубликовать трассировку стека.

+0

спасибо за объяснение :-) – abstractMan

0

У меня есть дополнительная информация ... (+ теперь я использую Hibernate аннотации)

В журнале я вижу:

[INFO] class org.hibernate.cfg.ExtendedMappings has interface org.hibernate 
.cfg.Mappings as super class 

Я думаю, что это несовместимость с версией спящего-поиск. Вот зависимости с помощью Ivy

<dependency org="org.hibernate" name="hibernate-core" rev="3.3.2.GA" conf="runtime->default,optional;full->sources"/> 
<dependency org="org.hibernate" name="hibernate-annotations" rev="3.4.0.GA" conf="runtime->default;full->sources"/> 

<dependency org="org.hibernate" name="hibernate-search" rev="3.2.0.Final" conf="runtime->default,optional;full->sources"> 
    <exclude org="javax.jms" name="jms" /> 
</dependency> 

Я смотрел на спящем режиме совместимости Matrix, я увидел Hibernate-core.3.3.2, что Hibernate 3.1.x совместит. Я собираюсь получить предыдущую версию и посмотреть, что произойдет

+0

Я меняю версию поиска спящего режима на 3.1.1.GA и что отлично работать :-) THX за вашу помощь ;-) – abstractMan