【问题标题】:EntityManager not injected from factoryEntityManager 未从工厂注入
【发布时间】: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 为我做,作为身份验证提供者(这就是我实现 UserDetailsS​​ervice 的原因)。
  • 如果它没有被注入,则它不在具有 entitymanagerfactory 且没有context:annotation-configcontext:component-scan 的上下文中。如果在启动过程中会出现异常,告诉您找不到依赖项。
  • 会不会是因为我用的是&lt;mvc:annotation-driven /&gt;?我在上面放置的所有标签都在同一个文件中,mvc-config.xml.

标签: spring hibernate spring-mvc jpa spring-security


【解决方案1】:

是的。看看here。您需要提供数据源并使用LocalContainerEntityManagerFactoryBean bean

编辑

这可能是因为没有可用的交易。阅读here

【讨论】:

  • 我仍然无法做到,在上面添加了一些细节。如果您需要更多,请指出我。
  • 能否共享应用程序context.xml?
  • 我已经添加了我的上下文配置。
  • 请提供EntityManager 配置。
  • 添加了EntityManagerFactory bean 配置。
猜你喜欢
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
相关资源
最近更新 更多