栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从JPA 2.1带注释的实体类自动生成数据模式,而无需数据库连接

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从JPA 2.1带注释的实体类自动生成数据模式,而无需数据库连接

我能够将您的Hibernate解决方案与JPA2.1混合使用:

现在,我可以从persistence.xml添加实体类

这样,我可以在实体所在的jar外部生成SQl文件。

这是一个临时解决方案,直到休眠修复此错误为止

谢谢你的帮助。

package com.stackoverflow.common.util.schema;import java.io.IOException;import java.util.Properties;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import javax.persistence.metamodel.ManagedType;import javax.persistence.metamodel.metamodel;import org.hibernate.boot.metadataBuilder;import org.hibernate.boot.metadataSources;import org.hibernate.boot.registry.BootstrapServiceRegistry;import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.boot.spi.metadataImplementor;import org.hibernate.cfg.Environment;import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl;import org.hibernate.jpa.AvailableSettings;import org.hibernate.tool.hbm2ddl.SchemaExport;import org.hibernate.dialect.MySQL5InnoDBDialect;public class JPA21Hibernate5ExportSchema {    private static final String JDBC_DRIVER = "org.h2.Driver";    private static final String JDBC_URL = "jdbc:h2:mem:export;DB_CLOSE_DELAY=-1";    private static final String JDBC_USERNAME = "sa";    private static final String JDBC_PASSWORD = "";        public JPA21Hibernate5ExportSchema() {    }    public static void main(String[] args) {        try { JPA21Hibernate5ExportSchema hes = new JPA21Hibernate5ExportSchema(); hes.export(args[0], args[1]); System.exit(0);        } catch (Exception e) { e.printStackTrace(); System.exit(1);        }    }    public void export(String persistenceUnitName, String sqlFile) throws IOException, ClassNotFoundException {        final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder().build();        final metadataSources metadataSources = new metadataSources(bsr);        final StandardServiceRegistryBuilder srrBuilder = new StandardServiceRegistryBuilder(bsr)     .applySetting(Environment.CONNECTION_PROVIDER, DriverManagerConnectionProviderImpl.class.getName())     .applySetting(Environment.DIALECT, MySQL5InnoDBDialect.class.getName())     .applySetting(Environment.URL, JDBC_URL).applySetting(Environment.USER, JDBC_USERNAME)     .applySetting(Environment.PASS, JDBC_PASSWORD);        // Use the persistence metamodel to retrieve the Entities classes        metamodel metamodel = this.getmetamodel(persistenceUnitName);        for (final ManagedType<?> managedType : metamodel.getManagedTypes()) { metadataSources.addAnnotatedClass(managedType.getJavaType());        }        final StandardServiceRegistry ssr = (StandardServiceRegistry) srrBuilder.build();        final metadataBuilder metadataBuilder = metadataSources.getmetadataBuilder(ssr);        final SchemaExport exporter = new SchemaExport((metadataImplementor) metadataBuilder.build());        exporter.setOutputFile(sqlFile);        exporter.setDelimiter(";");        exporter.setFormat(true);        exporter.create(false, true);    }        private metamodel getmetamodel(String persistenceUnitName) {        final Properties persistenceProperties = new Properties();        persistenceProperties.setProperty(AvailableSettings.JDBC_DRIVER, JDBC_DRIVER);        persistenceProperties.setProperty(AvailableSettings.JDBC_URL, JDBC_URL);        persistenceProperties.setProperty(AvailableSettings.JDBC_USER, "sa");        persistenceProperties.setProperty(AvailableSettings.JDBC_PASSWORD, "");        persistenceProperties.setProperty(org.hibernate.cfg.AvailableSettings.DIALECT,     MySQL5InnoDBDialect.class.getName());        final EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName,     persistenceProperties);        return emf.getmetamodel();    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428627.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号