gpt4 book ai didi

java - 以编程方式创建实体管理器,无需持久性文件

转载 作者:行者123 更新时间:2023-12-01 07:55:11 25 4
gpt4 key购买 nike

我试图在没有持久性文件的情况下以编程方式创建实体工厂管理器

    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



我该如何解决这个问题?

任何帮助将不胜感激

最佳答案

这是一种纯粹的编程方式,可以在没有 spring 和 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 提供了配置持久性的简化方法,同时支持多个 hibernate 版本。 (Spring 4.2 最高支持 Hibernate 5.1,Spring 4.3 最高支持 Hibernate 5.2)。

关于java - 以编程方式创建实体管理器,无需持久性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29434121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com