#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
это не пространство имен по умолчанию.