HHH-9281 : Table name generated for @ElementCollection uses owning entity class name instead of mapped entity name

(cherry picked from commit ccffe0dea9)

Conflicts:
	hibernate-core/src/test/java/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java
This commit is contained in:
Gail Badner 2014-07-09 15:08:21 -07:00
parent 7fd71efd04
commit bc37d5f6b2
3 changed files with 18 additions and 5 deletions

View File

@ -1187,7 +1187,7 @@ public abstract class CollectionBinder {
if ( StringHelper.isEmpty( associationTableBinder.getName() ) ) { if ( StringHelper.isEmpty( associationTableBinder.getName() ) ) {
//default value //default value
associationTableBinder.setDefaultName( associationTableBinder.setDefaultName(
collValue.getOwner().getEntityName(), collValue.getOwner().getJpaEntityName(),
mappings.getLogicalTableName( collValue.getOwner().getTable() ), mappings.getLogicalTableName( collValue.getOwner().getTable() ),
collectionEntity != null ? collectionEntity.getEntityName() : null, collectionEntity != null ? collectionEntity.getEntityName() : null,
collectionEntity != null ? mappings.getLogicalTableName( collectionEntity.getTable() ) : null, collectionEntity != null ? mappings.getLogicalTableName( collectionEntity.getTable() ) : null,

View File

@ -40,6 +40,7 @@ import org.hibernate.metamodel.spi.binding.PluralAttributeBinding;
import org.hibernate.metamodel.spi.relational.TableSpecification; import org.hibernate.metamodel.spi.relational.TableSpecification;
import org.hibernate.test.annotations.Country; import org.hibernate.test.annotations.Country;
import org.hibernate.test.util.SchemaUtil; import org.hibernate.test.util.SchemaUtil;
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.junit.Test; import org.junit.Test;
@ -259,6 +260,13 @@ public class CollectionElementTest extends BaseCoreFunctionalTestCase {
isCollectionColumnPresent( Boy.class.getName(), "hatedNames", "Boy_id" ); isCollectionColumnPresent( Boy.class.getName(), "hatedNames", "Boy_id" );
} }
@Test
@FailureExpectedWithNewMetamodel( jiraKey = "HHH-9281" )
public void testDefaultTableNameUsesJpaEntityName() {
final TableSpecification table = getCollectionTable( Matrix.class.getName(), "mvalues");
assertEquals( "Mtx_mvalues", table.getLogicalName().getText() );
}
private void isLegacyValueCollectionColumnPresent(String collectionHolder, String propertyName) { private void isLegacyValueCollectionColumnPresent(String collectionHolder, String propertyName) {
} }
@ -268,14 +276,19 @@ public class CollectionElementTest extends BaseCoreFunctionalTestCase {
} }
private void isCollectionColumnPresent(String collectionOwner, String propertyName, String columnName) { private void isCollectionColumnPresent(String collectionOwner, String propertyName, String columnName) {
final EntityBinding entityBinding = metadata().getEntityBinding( collectionOwner ); final TableSpecification table = getCollectionTable( collectionOwner, propertyName );
final PluralAttributeBinding binding = (PluralAttributeBinding) entityBinding.locateAttributeBinding( propertyName );
final TableSpecification table = binding.getPluralAttributeKeyBinding().getCollectionTable();
boolean hasColumn = table.locateColumn( propertyName ) != null; boolean hasColumn = table.locateColumn( propertyName ) != null;
assertTrue( "Could not find " + columnName, hasColumn ); assertTrue( "Could not find " + columnName, hasColumn );
} }
private TableSpecification getCollectionTable(String collectionOwner, String propertyName) {
final EntityBinding entityBinding = metadata().getEntityBinding( collectionOwner );
final PluralAttributeBinding binding = (PluralAttributeBinding) entityBinding.locateAttributeBinding( propertyName );
return binding.getPluralAttributeKeyBinding().getCollectionTable();
}
@Override @Override
protected Class[] getAnnotatedClasses() { protected Class[] getAnnotatedClasses() {
return new Class[] { return new Class[] {

View File

@ -17,7 +17,7 @@ import org.hibernate.annotations.Type;
/** /**
* @author Emmanuel Bernard * @author Emmanuel Bernard
*/ */
@Entity @Entity(name="Mtx")
public class Matrix { public class Matrix {
@Id @Id
@GeneratedValue @GeneratedValue