Spring Autowiring + Hibernate Search

Я пытаюсь внедрить сеанс гибернации для использования с поиском в спящем режиме, и у меня возникают проблемы с выяснением того, как настроить spring bean-компоненты для поиска в спящем режиме. Я знаю, что spring не поддерживает поиск в спящем режиме. У меня это работало до того, как я решил использовать hibernateDAO. Любые предложения будут высоко ценится.

public class RestaurantDAOImpl extends HibernateDaoSupport implements RestaurantDAO{

    public String getDishResults(final String query, final String location){
        return getHibernateTemplate().execute( new HibernateCallback<String>() {
            @Override
            public String doInHibernate(Session session) throws HibernateException, SQLException {

              FullTextSession fullTextSession = Search.getFullTextSession(session);
              fullTextSession.beginTransaction();

              QueryBuilder qBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity( Dish.class ).get();

              Query luceneQuery = qBuilder.keyword()
                    .onFields("dishName").matching("Burger")
                    .createQuery();

              ... 

              return // code that generates json result based on hibernate search
        });
    }

}

весенний контекст

<!-- Hibernate SessionFactory -->
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref local="dataSource" />
    </property>
    <property name="configLocation">
        <value>hibernate.cfg.xml</value>
    </property>
</bean>
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="hibernateProperties">
        <props>
            <!-- <prop key="hibernate.hbm2ddl.auto">create</prop> -->
            <prop key="hibernate.connection.pool_size">1</prop>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.connection.autocommit">true</prop>

            <!--MySQL -->
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
            <prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/database</prop>
            <prop key="hibernate.connection.username">root</prop>
            <prop key="hibernate.connection.password"></prop>

        </props>
    </property>
    <property name="annotatedClasses">
        <list>
            <value>com.bytebite.entities.Restaurant</value>
            <value>com.bytebite.entities.Dish</value>
        </list>
    </property>

</bean>

<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor"
    autowire="byName" /><!--sessionFactory will get autowired -->

<bean id="restaurantDAOTarget" class="com.bytebite.dao.RestaurantDAOImpl"
    autowire="byName" /><!--sessionFactory will get autowired -->

<bean id="RestaurantDAO" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces">
        <value>com.bytebite.dao.RestaurantDAO</value>
    </property>
    <property name="interceptorNames">
        <list>
            <value>hibernateInterceptor</value>
            <value>restaurantDAOTarget</value>
        </list>
    </property>
</bean>

And i have to somehow reference these (which were in hibernate.cfg.xml). Could I connect the hibernate context to hibernate.cfg.xml? would that help?

hibernate.cfg.xml (все равно что от него осталось. куда мне это поместить?)

    <!-- Hibernate Search -->
    <property name="hibernate.search.default.directory_provider">org.hibernate.search.store.FSDirectoryProvider</property> 
    <property name="hibernate.search.default.indexBase">/Users/amandacanyon/Bytebite/Bytebite/.luceneIndex</property>

person Alexis Canyon    schedule 17.08.2011    source источник


Ответы (2)


Ваша проблема, что делать со свойствами из hibernate.cfg.xml? Вот для чего используется <property name="hibernateProperties"> в фабричном компоненте. Вы помещаете туда все остальные свойства. Вы говорите, что добавление этих последних двух что-то ломает? Вы можете указать фабричному компоненту ссылаться на конфигурацию спящего режима с помощью setConfigLocation(), если вы действительно этого хотите, но простое перемещение этих свойств в конфигурацию Spring должно привести к тому же результату.

person Ryan Stewart    schedule 17.08.2011
comment
Я попытался переместить их в компонент сеанса factory с помощью приведенного ниже кода, и это не сработало. Я не был уверен, что это просто не поддерживается или я использовал неправильный синтаксис. - person Alexis Canyon; 17.08.2011
comment
‹имя свойства=hibernate.search.default.directory_provider›‹значение›org.hibernate.search.store.FSDirectoryProvider‹/value›‹/property› ‹имя свойства=hibernate.search.default.indexBase›‹value›/Users/ amandacanyon/Bytebite/Bytebite/.luceneIndex‹/value›‹/property› - person Alexis Canyon; 17.08.2011
comment
Это будет установка свойств компонента. Вам нужно сопоставить их с элементами <prop key="... внутри свойства hibernateProperties. - person Ryan Stewart; 18.08.2011

См. также http://community.jboss.org/wiki/SpringHibernateHibernateSearch (хотя в этом примере используется JPA)

person Hardy    schedule 18.08.2011