Я использую JPA/Hibernate для создания веб-приложения. Я использую LocalContainerEntityManagerFactoryBean
с <property name="packagesToScan" value="<pkg>" />
для создания моих объектов из пакета java и jdbc.datasource.DriverManagerDataSource
, настроенных для PostgreSQL, поэтому у меня нет определенного контекста постоянства.EntityManager не вводится с фабрики
Могу ли я построить EntityManager
с этими ограничениями, используя аннотации Spring или xml?
EDIT: Я использую код следующей формы, чтобы получить пользовательские данные для входа. В контексте Spring Security
значение EntityManager
всегда равно нулю.
@Repository
public class UserDao implements UserDetailsService {
@PersistenceContext
private EntityManager entityManager; // With getter and setter
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
// Used by spring-security, here entityManager is null
}
}
EDIT2: Добавлена настройка контекста
<context:spring-configured />
<context:annotation-config />
<context:component-scan base-package="<BasePackage>" />
EDIT3: Добавлен объект менеджера завод конфигурация:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="default_unit" />
<property name="dataSource" ref="dataSource" />
<property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence"></property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
</bean>
</property>
<property name="packagesToScan" value="<package>" />
<property name="jpaProperties">
<value>
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.hbm2ddl.auto=create-drop
hibernate.hbm2ddl.import_files=/loaded-on-startup/import.sql
<!-- ALSO CHECK IMPORT.SQL -->
</value>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
/// CONNECTION CONFIG ///
</bean>
Я также добавил default-autowire="byType"
к моему beans
тегу и autowire="byType"
к бобу аутентификации безопасности определение.
, как вы называете 'метод loadUserByUsername'? – Rohit
Я не делаю этого, Spring Security делает это для меня, будучи поставщиком проверки подлинности (вот почему я реализую UserDetailsService). –
Если он не инъецирован, он не находится в контексте, который имеет свойство entitymanagerfactory и не имеет «context: annotation-config' или« context: component-scan ». Если бы во время запуска было бы исключение, указывающее, что зависимости не могут быть найдены. –