0 0

hibernate search查不到结果10

用了spring+hibernate+hibernate search,照着文档上的配置,写代码,写测试,可以成功运行,可就是查不到结果
这个是application.properties文件
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/security
jdbc.username=root
jdbc.password=meng

hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.search.default.directory_provider=filesystem
hibernate.search.default.indexBase=/var/lucene/indexes

dbcp.maxIdle=5
dbcp.maxActive=40

这个是spring配置文件
	<!-- 读取配置值文件 -->
	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations" value="classpath:application.properties" />
	</bean>

<!--	<context:property-placeholder location="classpath:application.properties"/>-->

	<!-- 设置datasource -->
	<bean id="dataSource" destroy-method="close"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		
		<property name="maxIdle" value="${dbcp.maxIdle}" />
		<property name="maxActive" value="${dbcp.maxActive}" />
		<property name="defaultAutoCommit" value="false" />
		<property name="timeBetweenEvictionRunsMillis" value="3600000" />
		<property name="minEvictableIdleTimeMillis" value="3600000" />
	</bean>


	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<!--				<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>-->
<!--				<prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache/ehcache-hibernate-local.xml</prop>-->
				<prop key="hibernate.search.default.directory_provider">${hibernate.search.default.directory_provider}</prop>
				<prop key="hibernate.search.default.indexBase">${hibernate.search.default.indexBase}</prop>
<!--				<prop key="hibernate.current_session_context_class">thread</prop>-->
				
			</props>
		</property>
		
		<property name="packagesToScan" value="com.test_spring_security.model" />
	</bean>

	<!-- 事务管理器 -->
	<bean id="txManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	
<!--	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />-->

	<aop:config>
		<aop:pointcut id="serviceMethods"
			expression="execution(public * com.test_spring_security.service..*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
	</aop:config>

	<tx:advice id="txAdvice" transaction-manager="txManager">
		<tx:attributes>
			<tx:method name="get*" read-only="true" />
			<tx:method name="search*" read-only="true"/>
			<tx:method name="list*" read-only="true" />
			<tx:method name="add*" />
			<tx:method name="delete*" />
			<tx:method name="update*" />
		</tx:attributes>
	</tx:advice>
	
	<bean id="HibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
	<context:component-scan base-package="com.test_spring_security" />


然后这个是userDAOImpl的部分代码
	public List<User> search(String search) {
		Session session=this.hibernateTemplate.getSessionFactory().getCurrentSession();
		FullTextSession fullTextSession = Search.getFullTextSession(session);
		QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity( User.class ).get();
		org.apache.lucene.search.Query query =qb.keyword().onFields("name","password").matching(search).createQuery();
		org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(query, User.class);
		List result = hibQuery.list();
		return result;
	}

数据库里有数据,也按文档上说的执行了那两行代码,执行完之后就是什么结果都没有,它还发了一条sql语句。
Hibernate: 
    select
        this_.id as id2_0_,
        this_.name as name2_0_,
        this_.password as password2_0_ 
    from
        User this_ 
    where
        (
            this_.id in (
                ?
            )
        )


ApplicationContext contex = new ClassPathXmlApplicationContext("beans-core.xml");
		SessionFactory sf=(SessionFactory) contex.getBean("sessionFactory");
		FullTextSession fullTextSession = Search.getFullTextSession(sf.openSession());
		try {
			fullTextSession.createIndexer().startAndWait();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

我在debug时候发现他在执行到如下方法的时候,resultTransformer 为空, list = resultTransformer.transformList( list );这句话就没能执行,而在执行这句话之前就把之前那个sql语句发出来了,不知道是不是这个原因,又或是其他的原因。
	public List list() throws HibernateException {
		hSearchQuery.getTimeoutManager().start();
		final List<EntityInfo> entityInfos = hSearchQuery.queryEntityInfos();
		Loader loader = getLoader();
		List list = loader.load( entityInfos.toArray( new EntityInfo[entityInfos.size()] ) );
		//no need to timeoutManager.isTimedOut from this point, we don't do anything intensive
		if ( resultTransformer == null || loader instanceof ProjectionLoader ) {
			//stay consistent with transformTuple which can only be executed during a projection
			//nothing to do
		}
		else {
			list = resultTransformer.transformList( list );
		}
		hSearchQuery.getTimeoutManager().stop();
		return list;
	}

请教各位大神,我实在是没办法了。
问题补充
好吧,我错了,我真的错了,我有点二了。
其实结果是查出来了,原因在于我在junit写断言的时候写错了
[code type="java"]
Assert.aeesertNull(list);

其实应该是写成
[code type="java"]
Assert.aeesertNotNull(list);

总之按照上面的配置加代码,结果是能查出来了。
2012年5月29日 15:28
目前还没有答案

相关推荐

    hibernate search4.2

    Hibernate Search 是 Hibernate 的一个扩展,它将 Apache Lucene 集成到 Hibernate ORM 中,使得数据库中的对象可以直接被索引和搜索。通过使用 Hibernate Search,开发者可以利用 Lucene 的强大搜索功能,而无需...

    Getting Started with Hibernate search

    Hibernate Search是Hibernate框架的一个扩展,它为持久化的领域模型提供了全文搜索查询的能力,将Lucene的搜索功能引入到Hibernate的世界。依赖于Apache Lucene——一个强大的全文搜索引擎库,同时也是Java领域事实...

    Getting Started with Hibernate Search

    Hibernate Search作为Hibernate Core的重要补充,为持久化领域模型提供了全文搜索查询的功能,将Lucene的搜索特性引入到Hibernate的世界中。本篇文章将深入探讨如何从零开始使用Hibernate Search,涵盖安装、配置、...

    使用 hibernate-search 实现全文检索及文档管理的例子

    **使用Hibernate Search实现全文检索及文档管理** 在Java开发中,全文检索和文档管理是常见的需求,特别是对于大型的企业级应用。Hibernate Search是Hibernate ORM框架的一个扩展,它提供了对数据库中的对象进行...

    基于Spring的Hibernate Search全文检索功能示例

    综上所述,基于Spring的Hibernate Search全文检索功能示例涵盖了从集成、配置、索引构建到查询和优化等多个环节,是学习和实践中不可多得的参考资料。通过深入理解和实践,开发者可以为自己的Java应用带来高效、精准...

    hibernate-search-4.5.0.Final-dist.zip

    总的来说,Hibernate Search 4.5.0.Final是Java开发中不可或缺的工具之一,它将数据库操作与全文搜索完美融合,极大地提升了Java应用的用户体验和开发效率。如果你的项目需要高效的文本搜索功能,那么这个版本的...

    hibernate-search

    这就是 **hibernate-search** 登场的原因,它将 **Lucene** 的功能无缝集成到Hibernate中,提供了一种强大的方式来索引和搜索数据库中的文本数据。 **Apache Lucene** 是一个开源的全文搜索引擎库,它提供了索引、...

    \hibernate search in action.rar

    1. **Hibernate Search概述**:Hibernate Search是Hibernate ORM的一个扩展,它将Apache Lucene集成到Java应用中,提供对象-关系映射(ORM)支持,使得在数据库中进行全文搜索变得简单。它支持索引实时更新,可以在...

    hibernate-search-4.1.1.Final-dist.zip

    Hibernate Search是Java世界中Hibernate ORM框架的一个强大扩展,它将全文搜索能力引入到持久化层,使得开发者能够轻松地在数据库中的数据上执行复杂的全文检索。本文将详细探讨Hibernate Search 4.1.1.Final版本的...

    hibernate-search-orm-4.4.2.Final.zip

    《深入理解Hibernate Search ORM 4.4.2.Final与AtomicMapOperations》 Hibernate Search ORM是Hibernate框架的一个重要扩展,它允许开发者在Java应用程序中实现全文检索功能,从而提升数据查询的效率和用户体验。在...

    hibernate_search_reference.pdf

    综上所述,`hibernate_search_reference.pdf` 为开发者提供了一个全面深入的 Hibernate Search 使用手册,涵盖了从基础配置到高级功能的各个方面,是进行基于 Hibernate Search 的开发不可或缺的资源。

    Hibernate_Search_Reference_Guide

    通过本参考指南的学习,开发者能够了解到如何在 JBoss Enterprise Application Platform 4.3 中集成和使用 Hibernate Search,从而为基于 Hibernate 的应用程序添加强大的全文搜索功能。从环境搭建、配置管理到具体...

    hibernate-search-4.1.1.Final.rar

    Hibernate Search是Hibernate ORM框架的一个扩展,它将强大的全文搜索引擎Lucene集成到Java应用程序中,为ORM对象提供高级搜索功能。在Hibernate Search 4.1.1.Final版本中,我们能看到对全文索引、实时搜索、多语言...

    hibernate-search-3.2.1.Final-dist.zip

    Hibernate Search提供了备份工具,可以在不中断服务的情况下,将索引备份到其他位置,以便在必要时恢复。 10. **实战应用** Hibernate Search广泛应用于电子商务、新闻门户、文档管理系统等领域,可以实现高效的...

    hibernate-search-4.3.0.Alpha1-dist.zip

    Hibernate Search是Hibernate框架的一个扩展,它将强大的全文搜索引擎Lucene集成到Java应用程序中,为ORM(对象关系映射)提供了丰富的搜索功能。4.3.0.Alpha1版本是这个项目在2014年发布的一个早期版本,虽然已经有...

Global site tag (gtag.js) - Google Analytics