/** * Short-hand form of calling {@link #getMetadataBuilder()} and using its * {@link org.hibernate.boot.MetadataBuilder#build()} method in cases where the application wants * to accept the defaults. * * @return The built metadata. */ public Metadata buildMetadata() { return getMetadataBuilder().build(); }
public Metadata buildMetadata(StandardServiceRegistry serviceRegistry) { return getMetadataBuilder( serviceRegistry ).build(); }
@Test public void testHbmXmlHandling() { final Metadata metadata = new MetadataSources( ssr ) .addResource( "org/hibernate/test/namingstrategy/synchronizedTables/mapping.hbm.xml" ) .getMetadataBuilder() .applyPhysicalNamingStrategy( TestingPhysicalNamingStrategy.INSTANCE ) .build(); verify( metadata.getEntityBinding( DynamicEntity.class.getName() ) ); }
@Test public void testAnnotationHandling() { final Metadata metadata = new MetadataSources( ssr ) .addAnnotatedClass( DynamicEntity.class ) .getMetadataBuilder() .applyPhysicalNamingStrategy( TestingPhysicalNamingStrategy.INSTANCE ) .build(); verify( metadata.getEntityBinding( DynamicEntity.class.getName() ) ); }
@Test public void testWithJpaCompliantNamingStrategy() throws Exception { Metadata metadata = new MetadataSources( serviceRegistry ) .addAnnotatedClass( A.class ) .addAnnotatedClass( AddressEntry.class ) .getMetadataBuilder() .applyImplicitNamingStrategy( ImplicitNamingStrategyJpaCompliantImpl.INSTANCE ) .build(); Collection collectionBinding = metadata.getCollectionBinding( A.class.getName() + ".address" ); assertEquals( "Expecting A#address collection table name (implicit) to be [A_address] per JPA spec (section 11.1.8)", "A_ADDRESS", collectionBinding.getCollectionTable().getQuotedName().toUpperCase(Locale.ROOT) ); }
@BeforeClassOnce public void setUp() { ssr = new StandardServiceRegistryBuilder().build(); metadata = (MetadataImplementor) new MetadataSources( ssr ) .addAnnotatedClass( VMTimestamped.class ) .addAnnotatedClass( DBTimestamped.class ) .getMetadataBuilder() .build(); }
@Test public void testWithCustomNamingStrategy() throws Exception { new MetadataSources( serviceRegistry ) .addAnnotatedClass(Address.class) .addAnnotatedClass(Person.class) .getMetadataBuilder() .applyPhysicalNamingStrategy( new DummyNamingStrategy() ) .build(); }
@Test public void testSessionFactoryInterceptor() { Serializable customerId = 1L; //tag::events-interceptors-session-factory-scope-example[] SessionFactory sessionFactory = new MetadataSources( new StandardServiceRegistryBuilder().build() ) .addAnnotatedClass( Customer.class ) .getMetadataBuilder() .build() .getSessionFactoryBuilder() .applyInterceptor( new LoggingInterceptor() ) .build(); //end::events-interceptors-session-factory-scope-example[] Session session = sessionFactory.openSession(); session.getTransaction().begin(); Customer customer = session.get( Customer.class, customerId ); customer.setName( "Mr. John Doe" ); //Entity Customer#1 changed from [John Doe, 0] to [Mr. John Doe, 0] session.getTransaction().commit(); session.close(); sessionFactory.close(); }
@Test public void testWithUpperCaseNamingStrategy() throws Exception { Metadata metadata = new MetadataSources( serviceRegistry ) .addAnnotatedClass(A.class) .getMetadataBuilder() .applyPhysicalNamingStrategy( new PhysicalNamingStrategyStandardImpl() { @Override public Identifier toPhysicalColumnName( Identifier name, JdbcEnvironment context) { return new Identifier( name.getText().toUpperCase(), name.isQuoted() ); } } ) .build(); PersistentClass entityBinding = metadata.getEntityBinding( A.class.getName() ); assertEquals("NAME", ((Selectable) entityBinding.getProperty( "name" ).getColumnIterator().next()).getText()); assertEquals("VALUE", ((Selectable) entityBinding.getProperty( "value" ).getColumnIterator().next()).getText()); }
@Test public void testWithCustomNamingStrategy() throws Exception { Metadata metadata = new MetadataSources( serviceRegistry ) .addAnnotatedClass(Address.class) .addAnnotatedClass(Person.class) .getMetadataBuilder() .applyImplicitNamingStrategy( new LongIdentifierNamingStrategy() ) .build(); UniqueKey uniqueKey = metadata.getEntityBinding( Address.class.getName()).getTable().getUniqueKeyIterator().next(); assertEquals( expectedUniqueKeyName(), uniqueKey.getName() ); org.hibernate.mapping.ForeignKey foreignKey = (org.hibernate.mapping.ForeignKey) metadata.getEntityBinding( Address.class.getName()).getTable().getForeignKeyIterator().next(); assertEquals( expectedForeignKeyName(), foreignKey.getName() ); org.hibernate.mapping.Index index = metadata.getEntityBinding( Address.class.getName()).getTable().getIndexIterator().next(); assertEquals( expectedIndexName(), index.getName() ); }
@Test public void testCollectionAsBasic() { StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try { Metadata metadata = new MetadataSources(ssr).addAnnotatedClass( Post.class ) .getMetadataBuilder().applyBasicType( new DelimitedStringsType() ) .build(); PersistentClass postBinding = metadata.getEntityBinding( Post.class.getName() ); Property tagsAttribute = postBinding.getProperty( "tags" ); } finally { StandardServiceRegistryBuilder.destroy( ssr ); } }
protected void buildResources() { final StandardServiceRegistryBuilder ssrb = constructStandardServiceRegistryBuilder(); serviceRegistry = ssrb.build(); afterStandardServiceRegistryBuilt( serviceRegistry ); final MetadataSources metadataSources = new MetadataSources( serviceRegistry ); applyMetadataSources( metadataSources ); afterMetadataSourcesApplied( metadataSources ); final MetadataBuilder metadataBuilder = metadataSources.getMetadataBuilder(); initialize( metadataBuilder ); configureMetadataBuilder( metadataBuilder ); metadata = (MetadataImplementor) metadataBuilder.build(); applyCacheSettings( metadata ); afterMetadataBuilt( metadata ); final SessionFactoryBuilder sfb = metadata.getSessionFactoryBuilder(); initialize( sfb, metadata ); configureSessionFactoryBuilder( sfb ); sessionFactory = (SessionFactoryImplementor) sfb.build(); afterSessionFactoryBuilt( sessionFactory ); }
@BeforeClassOnce public void setUp() { ssr = new StandardServiceRegistryBuilder().build(); metadata = (MetadataImplementor) new MetadataSources( ssr ) .addAnnotatedClass( Category.class ) .addAnnotatedClass( Item.class ) .addAnnotatedClass( Workflow.class ) .getMetadataBuilder() .applyImplicitNamingStrategy( new MyNamingStrategy() ) .build(); }
@Test @TestForIssue(jiraKey = "HHH-12791") public void testOnlyOneProxyClassGenerated() { StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try { Metadata metadata = new MetadataSources( ssr ).addAnnotatedClass( Person.class ) .getMetadataBuilder().applyBasicType( new DelimitedStringsType() ) .build(); PersistentClass persistentClass = metadata.getEntityBinding( Person.class.getName() ); ComponentType componentType1 = (ComponentType) persistentClass.getIdentifierMapper().getType(); Object instance1 = componentType1.instantiate( EntityMode.POJO ); ComponentType componentType2 = (ComponentType) persistentClass.getIdentifierMapper().getType(); Object instance2 = componentType2.instantiate( EntityMode.POJO ); assertEquals( instance1.getClass(), instance2.getClass() ); } finally { StandardServiceRegistryBuilder.destroy( ssr ); } } }
@Test @TestForIssue( jiraKey = "HHH-9908" ) public void testCollectionJoinTableNamingBase() { // really the same as the JPA compliant tests; here we just pick up the default ImplicitNamingStrategy final MetadataSources metadataSources = new MetadataSources(); try { metadataSources.addAnnotatedClass( Input.class ); metadataSources.addAnnotatedClass( Ptx.class ); final Metadata metadata = metadataSources.getMetadataBuilder() .build(); assertSameTableUsed( metadata ); } finally { ServiceRegistry metaServiceRegistry = metadataSources.getServiceRegistry(); if(metaServiceRegistry instanceof BootstrapServiceRegistry ) { BootstrapServiceRegistryBuilder.destroy( metaServiceRegistry ); } } }
@Test public void testEntityWithMultipleJoinFetchedBags() { StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().build(); Metadata metadata = new MetadataSources( standardRegistry ) .addAnnotatedClass( Post.class ) .addAnnotatedClass( PostComment.class ) .addAnnotatedClass( Tag.class ) .getMetadataBuilder() .build(); try { metadata.buildSessionFactory(); fail( "MultipleBagFetchException should have been thrown." ); } catch (MultipleBagFetchException expected) { } }
@Test @TestForIssue( jiraKey = "HHH-9908" ) public void testCollectionJoinTableNamingLegacyJpaStrategy() { final MetadataSources metadataSources = new MetadataSources(); try { metadataSources.addAnnotatedClass( Input.class ); metadataSources.addAnnotatedClass( Ptx.class ); final Metadata metadata = metadataSources.getMetadataBuilder() .applyImplicitNamingStrategy( ImplicitNamingStrategyLegacyJpaImpl.INSTANCE ) .build(); assertSameTableUsed( metadata ); } finally { ServiceRegistry metaServiceRegistry = metadataSources.getServiceRegistry(); if(metaServiceRegistry instanceof BootstrapServiceRegistry ) { BootstrapServiceRegistryBuilder.destroy( metaServiceRegistry ); } } }
@Test @TestForIssue( jiraKey = "HHH-9913" ) public void testNonAggregatedCompositeIdWithPkClass() { // HHH-9913 reports a NPE when bootstrapping a SF with non-aggregated composite identifiers // in org.hibernate.cache.internal.CacheDataDescriptionImpl#decode StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try { new MetadataSources( ssr ) .addAnnotatedClass( ItWithPkClass.class ) .getMetadataBuilder() .applySharedCacheMode( SharedCacheMode.ENABLE_SELECTIVE ) .build() .buildSessionFactory(); } finally { StandardServiceRegistryBuilder.destroy( ssr ); } } }
@Test @TestForIssue( jiraKey = "HHH-9908" ) public void testCollectionJoinTableNamingJpaCompliantStrategy() { // Even in 4.3, with JPA compliant naming, Hibernate creates an unusable table... final MetadataSources metadataSources = new MetadataSources(); try { metadataSources.addAnnotatedClass( Input.class ); metadataSources.addAnnotatedClass( Ptx.class ); final Metadata metadata = metadataSources.getMetadataBuilder() .applyImplicitNamingStrategy( ImplicitNamingStrategyJpaCompliantImpl.INSTANCE ) .build(); assertSameTableUsed( metadata ); } finally { ServiceRegistry metaServiceRegistry = metadataSources.getServiceRegistry(); if(metaServiceRegistry instanceof BootstrapServiceRegistry ) { BootstrapServiceRegistryBuilder.destroy( metaServiceRegistry ); } } }
@Test @TestForIssue( jiraKey = "HHH-9913" ) public void testNonAggregatedCompositeId() { // HHH-9913 reports a NPE when bootstrapping a SF with non-aggregated composite identifiers // in org.hibernate.cache.internal.CacheDataDescriptionImpl#decode StandardServiceRegistry ssr = new StandardServiceRegistryBuilder() .applySetting( AvailableSettings.USE_SECOND_LEVEL_CACHE, true ) .build(); try { new MetadataSources( ssr ) .addAnnotatedClass( It.class ) .getMetadataBuilder() .applySharedCacheMode( SharedCacheMode.ENABLE_SELECTIVE ) .build() .buildSessionFactory(); } finally { StandardServiceRegistryBuilder.destroy( ssr ); } }