2014-11-07 2 views
1

Я использую 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" к бобу аутентификации безопасности определение.

+0

, как вы называете 'метод loadUserByUsername'? – Rohit

+0

Я не делаю этого, Spring Security делает это для меня, будучи поставщиком проверки подлинности (вот почему я реализую UserDetailsService). –

+0

Если он не инъецирован, он не находится в контексте, который имеет свойство entitymanagerfactory и не имеет «context: annotation-config' или« context: component-scan ». Если бы во время запуска было бы исключение, указывающее, что зависимости не могут быть найдены. –

ответ

1

Да. Посмотрите here. Вы должны предоставить источник данных и использовать LocalContainerEntityManagerFactoryBean компонентов-

Редактировать

Это может быть из-за отсутствия сделки available.Read here

+0

Я не могу это сделать, добавил несколько подробностей выше. Если вам нужно больше, просто укажите это мне. –

+0

Невозможно ли использовать приложение context.xml? – Rohit

+0

Я добавил конфигурацию контекста. –

Смежные вопросы