我现在正在使用Spring 3.1和JPA 2.0的项目工作,我收到一条日志消息错误告诉我:“否持久性提供程序对于名为manager1的EntityManager“。“No Persistence provider for EntityManager named manager1”错误与JPA 2.0和Spring 3.1
这里是我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="DemoSpringCore" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>app.demo.model.Operation</class>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3309/test"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="root"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
这里是我的管理enity “Operation.java”: 包app.demo.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="operation")
public class Operation implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name="a",length=9)
private int a;
@Column(name="b",length=9)
private int b;
@Column(name="c",length=10)
private int c;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
这里是我的Java配置文件 “AppConfiguration.java” “的applicationContext.xml” 的春季3.1替代:
package app.demo.config;
import java.util.Properties;
import com.jolbox.bonecp.BoneCPDataSource;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import app.demo.dao.OperationDAO;
import app.demo.dao.OperationDAOImpl;
import app.demo.service.OperationServiceImpl;
import app.demo.service.OperationService;
import org.hibernate.ejb.HibernatePersistence;
@Configuration
@PropertySource("/META-INF/application.properties")
public class AppConfiguration {
private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";
private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql";
private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";
// private static final String PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY =
// "hibernate.ejb.naming_strategy";
@Resource
private Environment environment;
@Bean(name = "operationServiceBean")
public OperationService operationService() {
return new OperationServiceImpl();
}
@Bean(name = "operationDAOBean")
public OperationDAO operationDAO() {
return new OperationDAOImpl();
}
@Bean
public DataSource dataSource() {
BoneCPDataSource dataSource = new BoneCPDataSource();
dataSource.setDriverClass(environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
dataSource.setJdbcUrl(environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
dataSource.setUsername(environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
dataSource.setPassword(environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));
return (DataSource) dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean()
throws ClassNotFoundException {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean
.setPersistenceProviderClass(HibernatePersistence.class);
entityManagerFactoryBean.setDataSource(dataSource());
Properties jpaProterties = new Properties();
jpaProterties.put(PROPERTY_NAME_HIBERNATE_DIALECT, environment
.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
jpaProterties.put(PROPERTY_NAME_HIBERNATE_FORMAT_SQL, environment
.getRequiredProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL));
jpaProterties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, environment
.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
jpaProterties
.put(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN,
environment
.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
// jpaProterties.put(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY,
// environment
// .getRequiredProperty(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY));
entityManagerFactoryBean.setJpaProperties(jpaProterties);
return entityManagerFactoryBean;
}
}
,最后我的 “application.properties” 这里我把数据源连接属性:
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3309/test
db.username=root
db.password=root
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.format_sql=true
hibernate.show_sql=true
entitymanager.packages.to.scan=app.demo.model
PS:我用两种方法“appliaction.properties”,也是“persistence.xml中”每一个单独和后两者在同一时间,我希望这会工作,但没有任何事情发生! 此外,我在“AppConfiguration.java”和“persistence.xml”中都添加了提供者属性,并验证了所有依赖关系jar文件的存在!
感谢提前:)
可能重复HTTP ://stackoverflow.com/questions/1158159/no-persistence-provider-for-entitymanager-named) – 2012-09-02 10:23:12
谢谢老兄,就是这样:) – ayoubuntu