[英]Hibernate-search with hibernate
是否可以在没有jpa的情况下使用带有hibernate的休眠搜索。 我只使用jpa批注,但不使用entityManager。
在这种情况下,当我使用休眠会话在数据库中创建新对象时,休眠搜索如何能够知道他必须索引一个对象。
到目前为止,我只有一个称为“人”的实体。 我在该实体上添加了@indexed,现在我再也无法更新数据库中的人员实体。 在更新该实体的事务期间调用session.flush时会出现异常。
多谢。
这是我到目前为止所做的
我添加到了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();一起出现。 这是堆栈跟踪,但在那里什么都看不到。:(我还可以看到索引文件已创建为“ indexes / versions”,但为空)
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)
根据Hibernate搜索文档 :
如果直接使用Hibernate,则可以在hibernate.properties或hibernate.cfg.xml中完成。 如果您通过JPA使用Hibernate,则还可以将属性添加到persistence.xml。
您可以使用任何一种方式使用Hibernate Search。 是否有必要使用JPA批注,还是可以切换到Hibernate批注? 要获得有关异常的更多帮助,您应该发布堆栈跟踪。
我有更多信息...(+现在我使用休眠注释)
在日志中,我可以看到:
[INFO] class org.hibernate.cfg.ExtendedMappings has interface org.hibernate
.cfg.Mappings as super class
我认为这与休眠搜索版本不兼容。 这是使用常春藤的依赖
<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>
我查看了hibernate兼容性列表,对于Hibernate-core.3.3.2,我看到了Hibernate 3.1.x是兼容的。 我要获得以前的版本,看看会发生什么
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.