public Table getTable() { return collection.getCollectionTable(); }
/** * @deprecated User {@link Component#Component(MetadataBuildingContext, Collection)} instead. */ @Deprecated public Component(MetadataImplementor metadata, Collection collection) throws MappingException { this( metadata, collection.getCollectionTable(), collection.getOwner() ); }
public Component(MetadataBuildingContext metadata, Collection collection) throws MappingException { this( metadata, collection.getCollectionTable(), collection.getOwner() ); }
private boolean isDefaultColumnPresent(String collectionOwner, String propertyName, String suffix) { final Collection collection = metadata().getCollectionBinding( collectionOwner + "." + propertyName ); final Iterator columnIterator = collection.getCollectionTable().getColumnIterator(); boolean hasDefault = false; while ( columnIterator.hasNext() ) { Column column = (Column) columnIterator.next(); if ( (propertyName + suffix).equals( column.getName() ) ) hasDefault = true; } return hasDefault; }
private void assertSameTableUsed(Metadata metadata) { Collection inputs1Mapping = metadata.getCollectionBinding( Ptx.class.getName() + ".inputs1" ); assertEquals( "ptx_input", inputs1Mapping.getCollectionTable().getName() ); Collection inputs2Mapping = metadata.getCollectionBinding( Ptx.class.getName() + ".inputs2" ); assertEquals( "ptx_input", inputs2Mapping.getCollectionTable().getName() ); assertSame( inputs1Mapping.getCollectionTable(), inputs2Mapping.getCollectionTable() ); // NOTE : here so that tester can more easily see the produced table. It is only dumped to stdout new SchemaExport().create( EnumSet.of( TargetType.STDOUT ), metadata ); for ( int i = 0; i < inputs1Mapping.getCollectionTable().getColumnSpan(); i++ ) { final Column column = inputs1Mapping.getCollectionTable().getColumn( i ); // this, coupled with JPA saying the 2 collections implicitly map to the same table, // is the crux of the problem: all columns are null, so we effectively can never // insert rows into it. assertFalse( column.isNullable() ); } }
private void isCollectionColumnPresent(String collectionOwner, String propertyName, String columnName) { final Collection collection = metadata().getCollectionBinding( collectionOwner + "." + propertyName ); final Iterator columnIterator = collection.getCollectionTable().getColumnIterator(); boolean hasDefault = false; while ( columnIterator.hasNext() ) { Column column = (Column) columnIterator.next(); if ( columnName.equals( column.getName() ) ) hasDefault = true; } assertTrue( "Could not find " + columnName, hasDefault ); }
protected void checkDefaultCollectionTableName( Class<?> ownerEntityClass, String ownerCollectionPropertyName, String expectedCollectionTableName) { final org.hibernate.mapping.Collection collection = metadata().getCollectionBinding( ownerEntityClass.getName() + '.' + ownerCollectionPropertyName ); final org.hibernate.mapping.Table table = collection.getCollectionTable(); assertEquals( expectedCollectionTableName, table.getName() ); }
private String getMiddleTableName(Collection value, String entityName) { // We check how Hibernate maps the collection. if ( value.getElement() instanceof OneToMany && !value.isInverse() ) { // This must be a @JoinColumn+@OneToMany mapping. Generating the table name, as Hibernate doesn't use a // middle table for mapping this relation. return StringTools.getLastComponent( entityName ) + "_" + StringTools.getLastComponent( MappingTools.getReferencedEntityName( value.getElement() ) ); } // Hibernate uses a middle table for mapping this relation, so we get it's name directly. return value.getCollectionTable().getName(); }
@Test @TestForIssue(jiraKey = "HHH-9327") public void testManyToManyCollectionTable() { final Collection collectionMapping = metadata.getCollectionBinding( Category.class.getName() + "." + "items" ); final String expectedTableName = transformEntityName( Category.class.getName() ) + "_" + transformEntityName( Item.class.getName() ); assertEquals( expectedTableName, collectionMapping.getCollectionTable().getName() ); }
@Test @TestForIssue(jiraKey = "HHH-9327") public void testElementCollectionTable() { final Collection collectionMapping = metadata.getCollectionBinding( Workflow.class.getName() + ".localized" ); final String expectedTableName = transformEntityName( Workflow.class.getName() ) + "_localized"; assertEquals( expectedTableName, collectionMapping.getCollectionTable().getName() ); }
@Test @TestForIssue( jiraKey = "HHH-9327") public void testManyToManyForeignKeys() { final Collection ownerCollectionMapping = metadata.getCollectionBinding( Category.class.getName() + "." + "items" ); final String expectedOwnerFK = transformEntityName( Category.class.getName() ) + "_id"; final String expectedInverseFK = transformEntityName( Item.class.getName() ) + "_items_id"; boolean ownerFKFound = false; boolean inverseFKFound = false; for ( Iterator it = ownerCollectionMapping.getCollectionTable().getForeignKeyIterator(); it.hasNext(); ) { final String fkColumnName = ( (ForeignKey) it.next() ).getColumn( 0 ).getName(); if ( expectedOwnerFK.equals( fkColumnName ) ) { ownerFKFound = true; } else if ( expectedInverseFK.equals( fkColumnName ) ) { inverseFKFound = true; } } assertTrue( ownerFKFound ); assertTrue( inverseFKFound ); }
@Test public void testQuoteManytoMany() { Session s = openSession(); Transaction tx = s.beginTransaction(); User u = new User(); s.persist( u ); Role r = new Role(); s.persist( r ); u.getRoles().add( r ); s.flush(); s.clear(); u = (User) s.get( User.class, u.getId() ); assertEquals( 1, u.getRoles().size() ); tx.rollback(); String role = User.class.getName() + ".roles"; assertEquals( "User_Role", metadata().getCollectionBinding( role ).getCollectionTable().getName() ); s.close(); }
@Test public void testQuoteManytoMany() { String role = User.class.getName() + ".roles"; assertEquals( "User_Role", metadata().getCollectionBinding( role ).getCollectionTable().getName() ); Session s = openSession(); s.beginTransaction(); User u = new User(); s.persist( u ); Role r = new Role(); s.persist( r ); u.getRoles().add( r ); s.flush(); s.clear(); u = s.get( User.class, u.getId() ); assertEquals( 1, u.getRoles().size() ); s.getTransaction().rollback(); s.close(); }
@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) ); }
protected void validateCustomerIndustries(Metadata metadata) { final Collection collectionBinding = metadata.getCollectionBinding( Customer.class.getName() + ".industries" ); assertNotNull( collectionBinding ); validateCustomerIndustriesTableName( collectionBinding.getCollectionTable().getQuotedName() ); assertEquals( 1, collectionBinding.getKey().getColumnSpan() ); validateCustomerIndustriesKeyColumn( (Column) collectionBinding.getKey().getColumnIterator().next() ); assertEquals( 1, collectionBinding.getElement().getColumnSpan() ); validateCustomerIndustriesElementColumn( (Column) collectionBinding.getElement().getColumnIterator().next() ); }
protected void validateCustomerOrders(Metadata metadata) { final Collection collectionBinding = metadata.getCollectionBinding( Customer.class.getName() + ".orders" ); assertNotNull( collectionBinding ); validateCustomerOrdersTableName( collectionBinding.getCollectionTable().getQuotedName() ); assertEquals( 1, collectionBinding.getKey().getColumnSpan() ); validateCustomerOrdersKeyColumn( (Column) collectionBinding.getKey().getColumnIterator().next() ); assertEquals( 1, collectionBinding.getElement().getColumnSpan() ); validateCustomerOrdersElementColumn( (Column) collectionBinding.getElement().getColumnIterator().next() ); }
protected void validateCustomerRegisteredTrademarks(Metadata metadata) { final Collection collectionBinding = metadata.getCollectionBinding( Customer.class.getName() + ".registeredTrademarks" ); assertNotNull( collectionBinding ); validateCustomerRegisteredTrademarksTableName( collectionBinding.getCollectionTable().getQuotedName() ); assertEquals( 1, collectionBinding.getKey().getColumnSpan() ); validateCustomerRegisteredTrademarksKeyColumn( (Column) collectionBinding.getKey().getColumnIterator().next() ); assertEquals( 1, collectionBinding.getElement().getColumnSpan() ); validateCustomerRegisteredTrademarksElementColumn( (Column) collectionBinding.getElement() .getColumnIterator() .next() ); }
@Test @TestForIssue( jiraKey = "HHH-9908" ) public void testCollectionJoinTableNamingLegacyHbmStrategy() { final MetadataSources metadataSources = new MetadataSources(); try { metadataSources.addAnnotatedClass( Input.class ); metadataSources.addAnnotatedClass( Ptx.class ); final Metadata metadata = metadataSources.getMetadataBuilder() .applyImplicitNamingStrategy( ImplicitNamingStrategyLegacyHbmImpl.INSTANCE ) .build(); Collection inputs1Mapping = metadata.getCollectionBinding( Ptx.class.getName() + ".inputs1" ); assertEquals( "ptx_inputs1", inputs1Mapping.getCollectionTable().getName() ); Collection inputs2Mapping = metadata.getCollectionBinding( Ptx.class.getName() + ".inputs2" ); assertEquals( "ptx_inputs2", inputs2Mapping.getCollectionTable().getName() ); } finally { ServiceRegistry metaServiceRegistry = metadataSources.getServiceRegistry(); if(metaServiceRegistry instanceof BootstrapServiceRegistry ) { BootstrapServiceRegistryBuilder.destroy( metaServiceRegistry ); } } }
protected void validateCustomerAddresses(Metadata metadata) { final Collection collectionBinding = metadata.getCollectionBinding( Customer.class.getName() + ".addresses" ); assertNotNull( collectionBinding ); validateCustomerAddressesTableName( collectionBinding.getCollectionTable().getQuotedName() ); assertEquals( 1, collectionBinding.getKey().getColumnSpan() ); validateCustomerAddressesKeyColumn( (Column) collectionBinding.getKey().getColumnIterator().next() ); assertEquals( 3, collectionBinding.getElement().getColumnSpan() ); validateCustomerAddressesElementComponent( assertTyping( Component.class, collectionBinding.getElement() ) ); }
protected void checkDefaultJoinTableAndAllColumnNames( Metadata metadata, Class<?> ownerEntityClass, String ownerCollectionPropertyName, String expectedCollectionTableName, String ownerForeignKeyNameExpected, String[] columnNames) { final org.hibernate.mapping.Collection collection = metadata.getCollectionBinding( ownerEntityClass.getName() + '.' + ownerCollectionPropertyName ); final org.hibernate.mapping.Table table = collection.getCollectionTable(); assertEquals( expectedCollectionTableName, table.getName() ); // The default owner and inverse join columns can only be computed if they have PK with 1 column. assertEquals( 1, collection.getOwner().getKey().getColumnSpan() ); assertEquals( ownerForeignKeyNameExpected, collection.getKey().getColumnIterator().next().getText() ); int columnNumber = table.getColumnSpan(); for ( int i = 0; i < columnNumber; i++ ) { assertEquals( columnNames[i], table.getColumn( i + 1 ).getName()); } }