LocalSessionFactoryBean packagesToScan не работает с несколькими значениями

#java #spring #hibernate #spring-mvc #orm

#java #весна #спящий режим #spring-mvc #orm

Вопрос:

Я изучаю Hibernate и Spring. У меня есть несколько классов сущностей. Ниже приведена структура каталогов моего проекта:
введите описание изображения здесь

здесь LoginUser и Student две сущности @Entity , аннотированные с. Я настроил org.springframework.orm.hibernate4.LocalSessionFactoryBean в dispatcher-servlet.xml файле

 <beans:bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="packagesToScan" value="com.sachin.onlineexam.login.entity"></beans:property>
        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</beans:prop>
                <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
                <beans:prop key="hibernate.show_sql">true</beans:prop>
            </beans:props>
        </beans:property>


    </beans:bean>
 

С помощью этой конфигурации я могу сохранить LoginUser экземпляр в базе данных. Но когда я помещаю несколько значений для packagesToScan свойства, тогда оно выдает исключение org.hibernate.Исключение сопоставления: неизвестный объект: com.sachin.onlineexam.login.entity.LoginUser
Вот конфигурация с несколькими (массивными) значениями для packagesToScan

 <beans:bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="packagesToScan">
            <beans:array>
                <beans:value>
                    com.sachin.onlineexam.login.entity
                </beans:value>
                <beans:value>
                    com.sachin.onlineexam.student.entity
                </beans:value>
            </beans:array>

        </beans:property>
        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect
                </beans:prop>
                <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
                <beans:prop key="hibernate.show_sql">true</beans:prop>
            </beans:props>
        </beans:property>

    </beans:bean>
 

ПРОБЛЕМА: когда packagesToScan настроено значение одного пакета, <beans:property name="packagesToScan" value = "com.sachin.onlineexam.login.LoginUser/> тогда мое приложение работает НОРМАЛЬНО, и данные сохраняются в базе данных. Но когда он настроен с <beans:array><beans:value>...</beans:value></beans:array> помощью или с <beans:list>...</beans:list> помощью, тогда exception выдается вышеупомянутое. Предоставление более одного значения внутри <beans:array></beans:array> тега также не работает и дает такое же исключение.

Это проблема с packagesToScan property или что-то еще?

ПРИМЕЧАНИЕ: я использую версию hibernate 4 4.2.11 и версию Spring 4 4.3.23 . Я также пробовал использовать hibernate 5 и spring 5, хотя и не работает.

Комментарии:

1. Используйте современную конфигурацию на основе Java, а не старую XML-базу d

2. Но это должно работать и для конфигурации xml…

3. Просто используйте , разделенное значение в value элементе. Вы делаете вещи слишком сложными. `значение=»com.sachin.onlineexam.login.entity,com.sachin.onlineexam.student.entity». Spring автоматически преобразует это.

4. Это сработало….. Вы можете дать ответ, чтобы я мог вас похвалить

Ответ №1:

Попробуйте указать a value-type в теге коллекции:

    <beans:property name="packagesToScan">
        <beans:list value-type="java.lang.String">
            <beans:value>
                com.sachin.onlineexam.login.entity
            </beans:value>
        </beans:list>
    </beans:property>
 

или

    <beans:property name="packagesToScan">
        <beans:array value-type="java.lang.String">
            <beans:value>
                com.sachin.onlineexam.login.entity
            </beans:value>
        </beans:array>
    </beans:property>
 

Ответ №2:

используйте как показано ниже

 <bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="packagesToScan">
        <array>
            <value>com.erp</value>
            <value>com.bea</value>
        </array>
    </property>
</bean>
 

Комментарии:

1. Это точно такой же код, как в вопросе, без префикса. По-видимому, задействованы пространства имен, и beans это не пространство имен по умолчанию.