`
taburissmeng
  • 浏览: 5021 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

hibernate search查不到结果

阅读更多
用了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;
	}

请教各位大神,我实在是没办法了。
分享到:
评论

相关推荐

    harmonyos2-grails-hibernate-search-plugin:将HibernateSearch功能集成到Grails

    compile("org.grails.plugins:hibernate-search:2.3.0") compile("org.grails.plugins:hibernate5:6.1.8") compile("org.grails.plugins:cache") compile("org.hibernate:hibernate-core:5.2.10.Final") compile(...

    hibernate-search:Hibernate搜索:全文搜索域模型

    Hibernate Search自动从Hibernate ORM实体中提取数据,以将其推送到本地索引或远程索引。 它具有以下特点: 通过注释或编程API将实体属性到索引字段。 对数据库中的所有实体进行,以使用预先存在的数据初始化索引...

    java8看不到源码-amanda:一个用java8、springboot、jpa、hibernate-search和reactjs编写的博客

    看不到源码 Amanda Amanda is a blogging system written in java8、spring boot. Elegant and beautiful, worth trying. Demo : 预览: 首页 文章 简介 登录 后台首页 后台文章列表 文章编辑 文件 简介 监控 设置 ...

    mvn-search:讨厌search.maven.org UI的命令行界面

    mvn-search用于搜索Maven Central的命令行工具 对于那些喜欢在命令行中搜索Maven依赖关系而不是search.maven.org的Web UI的开发人员而言,这是一个实用程序... mvn-search hibernate-validator mvn-search g:org.slf4j

    ssh2(struts2+spring2.5+hibernate3.3)自动生成模版

    这些内容就是从带"-insert"的配置文件中来,把带"-insert"的配置文件内容加入到不带“insert”的配置文件中去。 generator\template\src\${basepackage_dir}目录下的文件实现: generator\template\src\${...

    essync:带有JPA和Elasticsearch的Spring Boot应用程序

    从Spring读取并写入弹性搜索的示例Spring Boot... 还提供了一个休息服务来将查询发送到嵌入式Elasticsearch。 只能提供一种方法来按名称搜索。 其余应用程序使用嵌入式servlet容器,因此不需要容器。 示例网址如下:

    spring-filter:使用简单的查询语法动态过滤JPA实体。 提供JPAHibernate谓词和Spring规范

    只需将我添加到您的pom.xml 。 您的API将获得功能全面的搜索功能。 您不使用API​​吗? 没问题,您可能仍然不想弄乱SQL,JPA谓词,安全性以及所有这些我猜想的东西。例/ search?filter = (品牌名称:奥迪或品牌...

    springmvc的使用

    我之前看spring配置数据库的开发,结果因为不会配置后来没用到,懂得了spring和hibernate和struts2的整和; springmvc确实比struts2优秀一些;我看springmvc ...

    sqltoy-orm框架系统-其他

    sqltoy-orm是比hibernate+myBatis更加贴合项目的orm框架,具有hibernate增删改的便捷性同时也具有比myBatis更加灵活优雅的自定义sql查询功能。 sqltoy-orm支持以下数据库: oracle 从oracle11g到19c db2 9.5+,建议从...

    Scala in Depth

    英文版深入理解Scala。 本书由Scala之父作序推荐,深入探讨了Scala里几个较为复杂的领域,包括类型系统的高阶内容、隐式转换、特质的组合技巧、集合、Actor、函数...——John Criffin Hibernate Search in Action合著者

    SYPRO示例项目源码和EasyUI入门视频教程

    第16课(tree数据载入后自动选中想要选择的节点、tree的iconCls需要注意的地方、js中不可以用search当function名称、combo组件的基本使用) 第17课(combobox属性介绍、combobox的autocomplete功能、联动功能,本地过滤...

    MF00331-JAVA制造装备物联生产管理(ERP)源码.zip

    shiro权限控制,结合ajax实现了异步认证与异步授权,同时实现了细粒度的权限动态分配(到按钮级别);添加了shiro session过期的登录跳转 jQuery EasyUI开发前端页面,利用jQuery文件上传插件实现拖拽上传的效果并对...

    Lerx 网站内容管理系统 v5.5.zip

    SpringMVC Hibernate ORM MySQL Hibernate Search(Apache Lucence) IK中文分词 Log4J ... 主要采用Jquery 1.9.1,使用Layui 2模块化前端框架。 Jquery Layui JSON Ajax Lerx 网站内容管理系统主要功能 前后台...

    SpringBoot企业级博客系统(未加密+源码)

    从JPA规范讲起,到Spring对于JPA的用法以及与Hibernate集成实现。本课程的数据库采用MySQL,但也可以方便切换到其他数据库。最后通过一个实战内容,来帮助学员理解掌握。 第7章 全文搜索ElasticSearch 企业级应用...

    self-entertainment:在线花店,消息中间件,springcloud,spring,sharding-jdbc,springboot,netty源码,vue,elasticsearch,lucene,mybatis,jpa

    包括aop,自定义注释解,springmvc,jpa + hibernate,springlistener,@预定定时任务,过滤器的简单实用,包括简单的登录权限验证,设备crud功能cloud模块没得说,主要是亲手建造一整套springcloud服务,包括常用的...

    Spring Boot带前后端 渐进式开发企业级博客系统

    从JPA规范讲起,到Spring对于JPA的用法以及与Hibernate集成实现。本课程的数据库采用MySQL, 但也可以方便切换到其他数据库。最后通过一个实战内容,来帮助学员理解掌握。 第7章 全文搜索ElasticSearch 企业级...

    JAVA上百实例源码以及开源项目

    产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥验证签名结果,...

    JAVA上百实例源码以及开源项目源代码

    产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥验证签名结果,...

Global site tag (gtag.js) - Google Analytics