Fala galera,
Estou tendo um problema com o uso de Lucene e Hibernate Search.
Os indices de procura sao criados,inclusive atraves do Luke consigo fazer uma pesquisa.
Porem,ao tentar executar uma pesquisa com uma implementacao no Java,e lancada a seguinte excecao:
Exception in thread “main” java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.hibernate.annotations.common.util.ReflectHelper.classForName(ReflectHelper.java:66)
at org.hibernate.search.engine.DocumentBuilderIndexedEntity.getDocumentClass(DocumentBuilderIndexedEntity.java:551)
at org.hibernate.search.engine.DocumentExtractor.extract(DocumentExtractor.java:68)
at org.hibernate.search.engine.DocumentExtractor.extract(DocumentExtractor.java:88)
at org.hibernate.search.query.FullTextQueryImpl.list(FullTextQueryImpl.java:304)
at pubcult.pesquisa.bean.AgentePesquisadorBean.realizarPesquisa(AgentePesquisadorBean.java:44)
at pubcult.negocio.bean.AgentePesquisaBean.realizarPesquisa(AgentePesquisaBean.java:22)
at main.GeraTabelas.main(GeraTabelas.java:19)
Segue o codigo da pesquisa:
Session session = SessionFactoryUtil.getFactory().getCurrentSession();
session.beginTransaction().begin();
FullTextSession fSession = Search.getFullTextSession(session);
fSession.beginTransaction();
QueryParser parser = new QueryParser(“textoLivro”,
new BrazilianAnalyzer(Version.LUCENE_29));
Query lucenceQuery = null;
try {
lucenceQuery = parser.parse(“textoLivro:” + palavraChave);
} catch (ParseException e) {
throw new RuntimeException("Nao rolou a pesquisa", e);
} // execute the query
List<Livro> livros = fSession.createFullTextQuery(lucenceQuery,
Livro.class).list();
return livros;
O codigo da classe Livro:
@Entity
@Indexed(index = “Livro”)
@Table(name = “LIVRO”)
public class Livro implements Serializable {
private static final long serialVersionUID = -3537691503173267644L;
public Livro() {
}
public Livro(String referenciaLivro , List<Autor> listaAutores, List<Editora> listaEditoras,
String tituloLivro, List<Categoria> categorias, String textoLivro) {
setListaAutores();
setEditorasLivro();
setCategorias();
for(Autor autor:listaAutores){
System.out.println(autor.getNomeAutor());
addAutor(autor);
}
for(Editora editora:listaEditoras){
System.out.println(editora.getNomeEditora());
addEditora(editora);
}
for(Categoria categoria:categorias){
System.out.println(categoria.getTipoCategoria());
addCategoria(categoria);
}
setTituloLivro(tituloLivro);
setTextoLivro(textoLivro);
setReferenciaLivro(referenciaLivro);
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idLivro")
private int idLivro;
@ManyToMany
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name="AUTOR_LIVRO" , joinColumns=@JoinColumn(name="idLivro") , inverseJoinColumns=@JoinColumn(name="idAutor"))
private List<Autor> listaAutores;
@ManyToMany
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name="LIVRO_EDITORA" , joinColumns=@JoinColumn(name="idLivro") , inverseJoinColumns=@JoinColumn(name="idEditora"))
private List<Editora> editorasLivro;
@Column(name = "tituloLivro")
private String tituloLivro;
@ManyToMany
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name="LIVRO_CATEGORIA" , joinColumns=@JoinColumn(name="idLivro") , inverseJoinColumns=@JoinColumn(name="idCategoria"))
private List<Categoria> categorias;
@Column(name = "referenciaLivro")
private String referenciaLivro;
@Field(index = Index.TOKENIZED, store = Store.YES)
@Analyzer(impl=BrazilianAnalyzer.class)
@Column(name = "textoLivro")
@Lob
private String textoLivro;
E pra finalizar,o codigo de criacao de indexacao:
Directory fsDirectory = FSDirectory.open(new File("./Indices/Livro"));
Analyzer brazilianAnalyzer = new BrazilianAnalyzer(
Version.LUCENE_29, BrazilianAnalyzer.BRAZILIAN_STOP_WORDS);
IndexDeletionPolicy deletionPolicy = new KeepOnlyLastCommitDeletionPolicy();
indexWriter = new IndexWriter(fsDirectory, brazilianAnalyzer,
deletionPolicy, IndexWriter.MaxFieldLength.UNLIMITED);
String textoLivro = livro.getTextoLivro();
Field textoLivroField = new Field("textoLivro", textoLivro,
Field.Store.YES, Field.Index.ANALYZED);
Document doc = new Document();
doc.add(textoLivroField);
indexWriter.addDocument(doc);
indexWriter.optimize();
indexWriter.close();
Alguem pode dar uma ajuda nisso:
Valew pela ajuda!
