【发布时间】:2015-01-04 10:23:26
【问题描述】:
我正在使用 JPA/Hibernate 构建一个 Web 应用程序。我使用LocalContainerEntityManagerFactoryBean 和<property name="packagesToScan" value="<pkg>" /> 从java 包构建我的实体,并为PostgreSQL 配置jdbc.datasource.DriverManagerDataSource,所以我没有定义的持久性上下文。
我可以使用 Spring 注释或 xml 构建具有这些约束的 EntityManager 吗?
编辑:
我正在使用以下形式的代码来获取用于登录的用户数据。在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" 到安全认证bean 定义。
【问题讨论】:
-
如何调用
loadUserByUsername方法? -
我不做,Spring Security 为我做,作为身份验证提供者(这就是我实现 UserDetailsService 的原因)。
-
如果它没有被注入,则它不在具有 entitymanagerfactory 且没有
context:annotation-config或context:component-scan的上下文中。如果在启动过程中会出现异常,告诉您找不到依赖项。 -
会不会是因为我用的是
<mvc:annotation-driven />?我在上面放置的所有标签都在同一个文件中,mvc-config.xml.
标签: spring hibernate spring-mvc jpa spring-security