List of usage examples for org.hibernate.boot MetadataSources getAnnotatedClasses
public Collection<Class<?>> getAnnotatedClasses()
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 . ja v a 2s. com*/ // [#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); }