Hibernate Search

1 resposta
gustavosedit

Olá,

Baixei o exemplo mydvds disponibilizado pela Caelum com implementação do Vraptor e Hibernate Search.

Problema: quando vou salvar um Dvd no banco de dados ocorre um erro. Não sei se pode ser algum problema de configuração no hibernate.cfg.xml, mas funciona quando tiro as anotações do Hibernate Search no meu modelo da tabela Dvd.

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
	
<hibernate-configuration>

	<session-factory>
	
	<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
	<property name="hibernate.connection.url">jdbc:mysql://localhost/mydvdsdb</property>
	<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">admin</property>
        
     	<property name="hibernate.show_sql">false</property>
	<property name="hibernate.hbm2ddl.auto">update</property>
	<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>

 	<property name="hibernate.search.default.directory_provider">org.hibernate.search.store.RAMDirectoryProvider</property>
	
	<property name="hibernate.search.default.directory_provider">
		       org.hibernate.search.store.FSDirectoryProvider
	</property>
	<property name="hibernate.search.default.indexBase">
		     	C:\TesteLucene\indiceNovo
	</property>

 	<mapping class="org.vraptor.mydvds.model.Dvd" />
 	<mapping class="org.vraptor.mydvds.model.User" />

	<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>
	</session-factory>

</hibernate-configuration>

entidade Dvd:

@Indexed
@Entity
public class Dvd {

	@DocumentId
	@Id 
	@GeneratedValue
	private Long id;

	@Field(name="title",index=Index.TOKENIZED,store=Store.YES)
	private String title;

	@Field(name="desc",index=Index.TOKENIZED,store=Store.YES)
	private String description;

	@ManyToMany(mappedBy = "dvds")
	private Set<User> users;

	@Enumerated(EnumType.STRING)
	private DvdType type;

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public DvdType getType() {
		return type;
	}

	public void setType(DvdType type) {
		this.type = type;
	}

	/**
	 * @return the users
	 */
	public Set<User> getUsers() {
		return users;
	}

	/**
	 * @param users
	 *            the users to set
	 */
	public void setUsers(Set<User> users) {
		this.users = users;
	}

	@Override
	public boolean equals(Object obj) {
		return obj instanceof Dvd
		&& getId().equals(((Dvd) obj).getId());
	}

	@Override
	public int hashCode() {
		if (this.id == null) {
			return 0;
		}
		return this.id.hashCode() * 31;
	}
	
	@Override
	public String toString() {
		return this.title;
	}
}

Erro:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org.apache.lucene.document.Document.add(Lorg/apache/lucene/document/Field;)V
	org.vraptor.VRaptorServlet.service(VRaptorServlet.java:95)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NoSuchMethodError: org.apache.lucene.document.Document.add(Lorg/apache/lucene/document/Field;)V
	org.hibernate.search.engine.DocumentBuilder.getDocument(DocumentBuilder.java:234)
	org.hibernate.search.event.FullTextIndexEventListener.onPostInsert(FullTextIndexEventListener.java:154)
	org.hibernate.action.EntityIdentityInsertAction.postInsert(EntityIdentityInsertAction.java:90)
	org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:66)
	org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
	org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
	org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:180)
	org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108)
	org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
	org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
	org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
	org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
	org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
	org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
	org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
	org.vraptor.mydvds.dao.DvdDao.add(DvdDao.java:33)
	org.vraptor.mydvds.logic.SingleDvdComponent.add(SingleDvdComponent.java:119)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.vraptor.component.DefaultLogicMethod.execute(DefaultLogicMethod.java:117)
	org.vraptor.interceptor.ExecuteLogicInterceptor.intercept(ExecuteLogicInterceptor.java:37)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:131)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:41)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:58)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.MultipartRequestInterceptor.intercept(MultipartRequestInterceptor.java:101)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.mydvds.interceptor.TransactionInterceptor.intercept(TransactionInterceptor.java:16)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.mydvds.interceptor.DaoInterceptor.intercept(DaoInterceptor.java:43)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.mydvds.interceptor.AuthorizationInterceptor.intercept(AuthorizationInterceptor.java:47)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:38)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:88)
	org.vraptor.core.DefaultController.execute(DefaultController.java:42)
	org.vraptor.VRaptorServlet.service(VRaptorServlet.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Agradeço quem puder me ajudar.

1 Resposta

gustavosedit

Resolvido!!!

Estava usando o Hibernate Search 3.0.0 Beta3 com o lucene-core-2.1.0, atualizei a versão para a Beta 4 com o lucene-core-2.2.0 e funcionou…

Criado 23 de julho de 2007
Ultima resposta 2 de ago. de 2007
Respostas 1
Participantes 1