2015-04-03 77 views
1

我试图以编程方式创建实体厂长没有持久性文件,编程创建实体管理器,而不持久性文件,

EntityManagerFactory emf; 
    Map<String, String> properties = new HashMap<String, String>(); 
    properties.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
    properties.put("hibernate.connection.url", "jdbc:mysql://173.194.25***************"); 
    properties.put("hibernate.connection.username", "etech****"); 
    properties.put("hibernate.connection.password", "A*****"); 
    properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); 
    properties.put("hibernate.show-sql", "true"); 
    properties.put("provider", "org.hibernate.ejb.HibernatePersistence"); 
    emf = Persistence.createEntityManagerFactory(idClient, properties); 

在线

emf = Persistence.createEntityManagerFactory(idClient, properties); 

我收到错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com****RepositoryFieldsFieldWorkerRepositoryImpl': Invocation of init method failed; nested exception is javax.persistence.PersistenceException: No Persistence provider for EntityManager named idClient

我该如何解决这个问题?

任何帮助将不胜感激

+0

视觉变化?这是什么意思 ? – tamtoum1987 2015-04-03 15:24:11

+0

其实这个评论是打算在框中,我告诉你我编辑时提出了什么改变... – rfornal 2015-04-03 15:37:11

回答

0

一个persistence.xml文件是必须在部署时按照JPA规范中,以创建持久性单元。

Create JPA EntityManager without persistence.xml configuration file

+0

我创建了一个persistence.xml文件,但我有同样的问题 <?xml version =“1.0”encoding = “UTF-8”?> javax.persistence.spi.PeristenceProvider tamtoum1987 2015-04-03 15:47:16

+0

您是否重新部署了您的应用?日志应包含确认PU已正确加载。如果在创建Emf时指定提供程序,则不需要在persistence.xml文件中指定提供程序。或者更好,如果你不需要在运行时改变它们,把所有的属性放在persistence.xml文件中 – mssch 2015-04-03 15:55:52

+0

我删除tomcat和mvn干净安装,并重新部署它同样的问题:( – tamtoum1987 2015-04-03 16:01:03

5

这里是要建立一个实体管理器没有弹簧和没有persistence.xml一个纯粹的编程方法。常量是从org.hibernate.cfg.AvailableSettings采取:

entityManagerFactory = new HibernatePersistenceProvider().createContainerEntityManagerFactory(
      archiverPersistenceUnitInfo(), 
      ImmutableMap.<String, Object>builder() 
        .put(JPA_JDBC_DRIVER, JDBC_DRIVER) 
        .put(JPA_JDBC_URL, JDBC_URL) 
        .put(DIALECT, Oracle12cDialect.class) 
        .put(HBM2DDL_AUTO, CREATE) 
        .put(SHOW_SQL, false) 
        .put(QUERY_STARTUP_CHECKING, false) 
        .put(GENERATE_STATISTICS, false) 
        .put(USE_REFLECTION_OPTIMIZER, false) 
        .put(USE_SECOND_LEVEL_CACHE, false) 
        .put(USE_QUERY_CACHE, false) 
        .put(USE_STRUCTURED_CACHE, false) 
        .put(STATEMENT_BATCH_SIZE, 20) 
        .build()); 

entityManager = entityManagerFactory.createEntityManager(); 

和臭名昭著的PersistenceUnitInfo

private static PersistenceUnitInfo archiverPersistenceUnitInfo() { 
    return new PersistenceUnitInfo() { 
     @Override 
     public String getPersistenceUnitName() { 
      return "ApplicationPersistenceUnit"; 
     } 

     @Override 
     public String getPersistenceProviderClassName() { 
      return "org.hibernate.jpa.HibernatePersistenceProvider"; 
     } 

     @Override 
     public PersistenceUnitTransactionType getTransactionType() { 
      return PersistenceUnitTransactionType.RESOURCE_LOCAL; 
     } 

     @Override 
     public DataSource getJtaDataSource() { 
      return null; 
     } 

     @Override 
     public DataSource getNonJtaDataSource() { 
      return null; 
     } 

     @Override 
     public List<String> getMappingFileNames() { 
      return Collections.emptyList(); 
     } 

     @Override 
     public List<URL> getJarFileUrls() { 
      try { 
       return Collections.list(this.getClass() 
              .getClassLoader() 
              .getResources("")); 
      } catch (IOException e) { 
       throw new UncheckedIOException(e); 
      } 
     } 

     @Override 
     public URL getPersistenceUnitRootUrl() { 
      return null; 
     } 

     @Override 
     public List<String> getManagedClassNames() { 
      return Collections.emptyList(); 
     } 

     @Override 
     public boolean excludeUnlistedClasses() { 
      return false; 
     } 

     @Override 
     public SharedCacheMode getSharedCacheMode() { 
      return null; 
     } 

     @Override 
     public ValidationMode getValidationMode() { 
      return null; 
     } 

     @Override 
     public Properties getProperties() { 
      return new Properties(); 
     } 

     @Override 
     public String getPersistenceXMLSchemaVersion() { 
      return null; 
     } 

     @Override 
     public ClassLoader getClassLoader() { 
      return null; 
     } 

     @Override 
     public void addTransformer(ClassTransformer transformer) { 

     } 

     @Override 
     public ClassLoader getNewTempClassLoader() { 
      return null; 
     } 
    }; 
} 

注意,Spring提供了配置持久精简的方式,同时支持多种休眠版本。 (Spring 4.2支持Hibernate 5.1,Spring 4.3支持Hibernate 5.2)。

+0

太棒了!谢谢。 – Krismorte 2018-01-18 21:18:15