List of usage examples for org.hibernate.tool.hbm2ddl SchemaExport SchemaExport
SchemaExport
From source file:org.jooq.example.jpa.JPAExample.java
License:Apache License
@SuppressWarnings("serial") public static void main(String[] args) throws Exception { Connection connection = null; EntityManagerFactory emf = null;//from www. j a va 2 s . c o m EntityManager em = null; try { // Bootstrapping JDBC: Class.forName("org.h2.Driver"); connection = DriverManager.getConnection("jdbc:h2:mem:jooq-jpa-example", "sa", ""); final Connection c = connection; // Creating an in-memory H2 database from our entities MetadataSources metadata = new MetadataSources(new StandardServiceRegistryBuilder() .applySetting("hibernate.dialect", "org.hibernate.dialect.H2Dialect") .applySetting("javax.persistence.schema-generation-connection", connection) .applySetting("javax.persistence.create-database-schemas", true) // [#5607] JPADatabase causes warnings - This prevents // them .applySetting(AvailableSettings.CONNECTION_PROVIDER, new ConnectionProvider() { @SuppressWarnings("rawtypes") @Override public boolean isUnwrappableAs(Class unwrapType) { return false; } @Override public <T> T unwrap(Class<T> unwrapType) { return null; } @Override public Connection getConnection() { return c; } @Override public void closeConnection(Connection conn) throws SQLException { } @Override public boolean supportsAggressiveRelease() { return true; } }).build()); metadata.addAnnotatedClass(Actor.class); metadata.addAnnotatedClass(Film.class); metadata.addAnnotatedClass(Language.class); SchemaExport export = new SchemaExport(); export.create(EnumSet.of(TargetType.DATABASE), metadata.buildMetadata()); // Setting up an EntityManager using Spring (much easier than out-of-the-box Hibernate) LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean(); HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); adapter.setDatabasePlatform(SQLDialect.H2.thirdParty().hibernateDialect()); bean.setDataSource(new SingleConnectionDataSource(connection, true)); bean.setPackagesToScan("org.jooq.example.jpa.entity"); bean.setJpaVendorAdapter(adapter); bean.setPersistenceUnitName("test"); bean.setPersistenceProviderClass(HibernatePersistenceProvider.class); bean.afterPropertiesSet(); emf = bean.getObject(); em = emf.createEntityManager(); final EntityManager e = em; // Run some Hibernate / jOOQ logic inside of a transaction em.getTransaction().begin(); run(em, DSL.using(new DefaultConfiguration().set(connection).set(new DefaultExecuteListener() { @Override public void start(ExecuteContext ctx) { // Flush all changes from the EntityManager to the database for them to be visible in jOOQ e.flush(); super.start(ctx); } }))); em.getTransaction().commit(); } finally { if (em != null) em.close(); if (emf != null) emf.close(); if (connection != null) connection.close(); } }
From source file:org.jooq.example.jpa.Setup.java
License:Apache License
static void run(BiConsumer<EntityManager, DSLContext> consumer) throws Exception { Connection connection = null; EntityManagerFactory emf = null;// w w w.j a v a 2s . c o m EntityManager em = null; try { // Bootstrapping JDBC: Class.forName("org.h2.Driver"); connection = new LoggingConnection( DriverManager.getConnection("jdbc:h2:mem:jooq-jpa-example", "sa", "")); final Connection c = connection; // Creating an in-memory H2 database from our entities MetadataSources metadata = new MetadataSources(new StandardServiceRegistryBuilder() .applySetting("hibernate.dialect", "org.hibernate.dialect.H2Dialect") .applySetting("javax.persistence.schema-generation-connection", connection) .applySetting("javax.persistence.create-database-schemas", true) // [#5607] JPADatabase causes warnings - This prevents // them .applySetting(AvailableSettings.CONNECTION_PROVIDER, new ConnectionProvider() { @SuppressWarnings("rawtypes") @Override public boolean isUnwrappableAs(Class unwrapType) { return false; } @Override public <T> T unwrap(Class<T> unwrapType) { return null; } @Override public Connection getConnection() { return c; } @Override public void closeConnection(Connection conn) throws SQLException { } @Override public boolean supportsAggressiveRelease() { return true; } }).build()); metadata.addAnnotatedClass(Actor.class); metadata.addAnnotatedClass(Film.class); metadata.addAnnotatedClass(Language.class); SchemaExport export = new SchemaExport(); export.create(EnumSet.of(TargetType.DATABASE), metadata.buildMetadata()); // Setting up an EntityManager using Spring (much easier than out-of-the-box Hibernate) LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean(); HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); adapter.setDatabasePlatform(SQLDialect.H2.thirdParty().hibernateDialect()); bean.setDataSource(new SingleConnectionDataSource(connection, true)); bean.setPackagesToScan("org.jooq.example.jpa.entity"); bean.setJpaVendorAdapter(adapter); bean.setPersistenceUnitName("test"); bean.setPersistenceProviderClass(HibernatePersistenceProvider.class); bean.afterPropertiesSet(); emf = bean.getObject(); em = emf.createEntityManager(); final EntityManager e = em; // Run some Hibernate / jOOQ logic inside of a transaction em.getTransaction().begin(); data(em); consumer.accept(em, DSL.using(new DefaultConfiguration().set(connection).set(new DefaultExecuteListener() { @Override public void start(ExecuteContext ctx) { // Flush all changes from the EntityManager to the database for them to be visible in jOOQ e.flush(); super.start(ctx); } }))); em.getTransaction().commit(); } finally { if (em != null) em.close(); if (emf != null) emf.close(); if (connection != null) connection.close(); } }
From source file:org.jooq.meta.extensions.jpa.JPADatabase.java
License:Apache License
@Override protected DSLContext create0() { if (connection == null) { String packages = getProperties().getProperty("packages"); if (isBlank(packages)) { packages = ""; log.warn("No packages defined", "It is highly recommended that you provide explicit packages to scan"); }/*from w ww. jav a2s . co m*/ // [#9058] Properties use camelCase notation. boolean useAttributeConverters = Boolean.valueOf(getProperties().getProperty("useAttributeConverters", getProperties().getProperty("use-attribute-converters", "true"))); String unqualifiedSchema = getProperties().getProperty("unqualifiedSchema", "none").toLowerCase(); publicIsDefault = "none".equals(unqualifiedSchema); try { Properties info = new Properties(); info.put("user", "sa"); info.put("password", ""); connection = new org.h2.Driver().connect("jdbc:h2:mem:jooq-meta-extensions-" + UUID.randomUUID(), info); // [#6709] Apply default settings first, then allow custom overrides Map<String, Object> settings = new LinkedHashMap<>(); settings.put("hibernate.dialect", HIBERNATE_DIALECT); settings.put("javax.persistence.schema-generation-connection", connection); settings.put("javax.persistence.create-database-schemas", true); // [#5607] JPADatabase causes warnings - This prevents them settings.put(AvailableSettings.CONNECTION_PROVIDER, connectionProvider()); for (Entry<Object, Object> entry : getProperties().entrySet()) { String key = "" + entry.getKey(); if (key.startsWith("hibernate.") || key.startsWith("javax.persistence.")) userSettings.put(key, entry.getValue()); } settings.putAll(userSettings); StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(); builder.applySettings(settings); MetadataSources metadata = new MetadataSources(builder.applySettings(settings).build()); ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider( true); scanner.addIncludeFilter(new AnnotationTypeFilter(Entity.class)); // [#5845] Use the correct ClassLoader to load the jpa entity classes defined in the user project ClassLoader cl = Thread.currentThread().getContextClassLoader(); for (String pkg : packages.split(",")) for (BeanDefinition def : scanner.findCandidateComponents(defaultIfBlank(pkg, "").trim())) metadata.addAnnotatedClass(Class.forName(def.getBeanClassName(), true, cl)); // This seems to be the way to do this in idiomatic Hibernate 5.0 API // See also: http://stackoverflow.com/q/32178041/521799 // SchemaExport export = new SchemaExport((MetadataImplementor) metadata.buildMetadata(), connection); // export.create(true, true); // Hibernate 5.2 broke 5.0 API again. Here's how to do this now: SchemaExport export = new SchemaExport(); export.create(EnumSet.of(TargetType.DATABASE), metadata.buildMetadata()); if (useAttributeConverters) loadAttributeConverters(metadata.getAnnotatedClasses()); } catch (Exception e) { throw new DataAccessException("Error while exporting schema", e); } } return DSL.using(connection); }
From source file:org.springframework.cloud.dataflow.server.repository.SchemaGenerationTests.java
License:Apache License
private void generateDdlFiles(String dialect, File tempDir, PersistenceUnitInfo persistenceUnitInfo) { logger.info("Generating DDL script for " + dialect); final MetadataSources metadata = new MetadataSources(new StandardServiceRegistryBuilder() .applySetting("hibernate.dialect", "org.hibernate.dialect." + dialect + "Dialect") .applySetting("hibernate.physical_naming_strategy", SpringPhysicalNamingStrategy.class.getName()) .applySetting("hibernate.implicit_naming_strategy", SpringImplicitNamingStrategy.class.getName()) .build());//from w w w .ja va 2 s. c o m for (String clazz : persistenceUnitInfo.getManagedClassNames()) { logger.info(clazz); metadata.addAnnotatedClassName(clazz); } final SchemaExport export; try { export = new SchemaExport(); export.setDelimiter(";"); export.setFormat(true); export.setOutputFile(new File(tempDir, "schema-" + dialect.toLowerCase() + ".sql").getAbsolutePath()); } catch (HibernateException e) { throw new IllegalStateException(e); } EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.SCRIPT); export.execute(targetTypes, SchemaExport.Action.BOTH, metadata.buildMetadata()); }
From source file:org.wallride.tools.Hbm2ddl.java
License:Apache License
public static void main(String[] args) throws Exception { String locationPattern = "classpath:/org/wallride/domain/*"; final BootstrapServiceRegistry registry = new BootstrapServiceRegistryBuilder().build(); final MetadataSources metadataSources = new MetadataSources(registry); final StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder(registry); registryBuilder.applySetting(AvailableSettings.DIALECT, ExtendedMySQL5InnoDBDialect.class.getCanonicalName()); registryBuilder.applySetting(AvailableSettings.GLOBALLY_QUOTED_IDENTIFIERS, true); registryBuilder.applySetting(AvailableSettings.PHYSICAL_NAMING_STRATEGY, PhysicalNamingStrategySnakeCaseImpl.class); final PathMatchingResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); final Resource[] resources = resourcePatternResolver.getResources(locationPattern); final SimpleMetadataReaderFactory metadataReaderFactory = new SimpleMetadataReaderFactory(); for (Resource resource : resources) { MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(resource); AnnotationMetadata metadata = metadataReader.getAnnotationMetadata(); if (metadata.hasAnnotation(Entity.class.getName())) { metadataSources.addAnnotatedClass(Class.forName(metadata.getClassName())); }// w w w. j av a 2 s. c o m } final StandardServiceRegistryImpl registryImpl = (StandardServiceRegistryImpl) registryBuilder.build(); final MetadataBuilder metadataBuilder = metadataSources.getMetadataBuilder(registryImpl); new SchemaExport().setHaltOnError(true).setDelimiter(";").create(EnumSet.of(TargetType.STDOUT), metadataBuilder.build()); }