Spring和Hibernate - 没有名为xxx的EntityManager的持久性提供程序

时间:2016-06-04 23:44:11

标签: java spring hibernate spring-mvc

我试图将Hibernate与Spring集成,但我遇到了一些困难。我不确定在哪里搜索此问题的来源,也许我只是使用我的项目架构和代码粘贴屏幕。

project

FlowerDAO:

 @ManagedBean(name="flowerDao")
 @RequestScoped
 @Component
 public class FlowerDAOImpl implements FlowerDAO {

@PersistenceContext(unitName="flowerproject")
EntityManager entityManager;

private EntityManagerFactory entityManagerFactory;

private DataSource dataSource;


public EntityManager getEntityManager() {
    return entityManager;
}

public void setEntityManager(EntityManager entityManager) {
    this.entityManager = entityManager;
}

public DataSource getDataSource() {
    return dataSource;
}

public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
}

public FlowerDAOImpl(){
    entityManagerFactory = Persistence.createEntityManagerFactory("flowerproject");
    entityManager = entityManagerFactory.createEntityManager();
}

@Override
public Set<Flower> findAll() {
    TypedQuery<Flower> query = entityManager.createNamedQuery("Flower.findAll", Flower.class);
    return (Set<Flower>) query.getResultList();
}

的persistence.xml:

<persistence-unit name="flowerproject" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="root" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3307/flowersdb" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
    </properties>
</persistence-unit>

beans.xml中:

<bean id="flowerDAO" class="org.damian.dao.FlowerDAOImpl">
    <property name="dataSource" ref="dataSource" />
</bean>

   <mvc:annotation-driven />

<context:component-scan base-package="com.flowerproject.controller" />
<context:component-scan base-package="com.flowerproject.dao" />

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://127.0.0.1:3307/flowersdb" />
     <property name="username" value="root" />
    <property name="password" value="root" />
</bean>

1 个答案:

答案 0 :(得分:0)

尝试在beans.xml文件中添加引用persistence.xml文件的bean。

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceXmlLocation" value="classpath:persistence.xml" />
        <property name="persistenceUnitName" value="flowerproject" />
        <property name="dataSource" value="dataSource"/>
</bean>

persistance.xml文件应位于resources文件夹中。此外,persistance.xml和dataSource中还存在重复的连接信息。根据您的想法,可能会删除一个。