LocalSessionFactoryBean packagesToScan не работает с несколькими значениями - PullRequest
0 голосов
/ 13 апреля 2019

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

здесь 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.MappingException: неизвестный объект: 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/>, тогда мое приложение работает FINE и данные сохраняются в базе данных. Но когда он настроен на <beans:array><beans:value>...</beans:value></beans:array> или <beans:list>...</beans:list>, тогда выше exception выбрасывается. Предоставление более одного значения внутри тега <beans:array></beans:array> также Не работает и выдача того же исключения.

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

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

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Попробуйте указать 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>
0 голосов
/ 14 апреля 2019

использовать как сильфон

<bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="packagesToScan">
        <array>
            <value>com.erp</value>
            <value>com.bea</value>
        </array>
    </property>
</bean>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...