mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-09 04:34:49 +00:00
HHH-7142 : Add test case for many-to-one on property-ref
This commit is contained in:
parent
fa2de2351a
commit
0b3baf5812
@ -126,18 +126,56 @@ public void testEntityWithManyToOneMapping() {
|
||||
EntityBinding referencedEntityBinding = referenceBinding.getReferencedEntityBinding();
|
||||
assertSame( "Should be the same entity binding", referencedEntityBinding, simpleEntityBinding );
|
||||
|
||||
EntityBinding entityWithManyToOneBinding = metadata.getEntityBinding( ManyToOneEntity.class.getName() );
|
||||
|
||||
// binding model
|
||||
EntityBinding entityWithManyToOneBinding = metadata.getEntityBinding( EntityWithManyToOnes.class.getName() );
|
||||
AttributeBinding attributeBinding = entityWithManyToOneBinding.locateAttributeBinding( "simpleEntity" );
|
||||
assertSame( referenceBinding, attributeBinding );
|
||||
checkManyToOneAttributeBinding(
|
||||
metadata,
|
||||
entityWithManyToOneBinding,
|
||||
attributeBinding,
|
||||
simpleEntityBinding.getHierarchyDetails().getEntityIdentifier().getValueBinding(),
|
||||
"`simpleEntity`"
|
||||
);
|
||||
|
||||
checkManyToOneAttributeBinding(
|
||||
metadata,
|
||||
entityWithManyToOneBinding,
|
||||
entityWithManyToOneBinding.locateAttributeBinding( "simpleEntityFromPropertyRef" ),
|
||||
simpleEntityBinding.locateAttributeBinding( "name" ),
|
||||
"`simplename`"
|
||||
);
|
||||
}
|
||||
|
||||
private void checkManyToOneAttributeBinding(
|
||||
MetadataImplementor metadata,
|
||||
EntityBinding entityWithManyToOneBinding,
|
||||
AttributeBinding attributeBinding,
|
||||
AttributeBinding referencedAttributeBinding,
|
||||
String manyToOneColumnName) {
|
||||
final EntityBinding referencedEntityBinding = referencedAttributeBinding.getContainer().seekEntityBinding();
|
||||
final String referencedEntityName = referencedEntityBinding.getEntity().getName();
|
||||
assertTrue( SingularAttributeBinding.class.isInstance( referencedAttributeBinding ) );
|
||||
assertEquals( 1, SingularAttributeBinding.class.cast( referencedAttributeBinding ).getRelationalValueBindings().size() );
|
||||
final Value referencedValue =
|
||||
SingularAttributeBinding.class.cast( referencedAttributeBinding )
|
||||
.getRelationalValueBindings()
|
||||
.iterator()
|
||||
.next()
|
||||
.getValue();
|
||||
assertTrue( Column.class.isInstance( referencedValue ) );
|
||||
final JdbcDataType referencedJdbcDataType = Column.class.cast( referencedValue ).getJdbcDataType();
|
||||
|
||||
// binding model
|
||||
assertTrue( attributeBinding.isAssociation() );
|
||||
assertTrue( attributeBinding.getEntityReferencingAttributeBindings().isEmpty() );
|
||||
assertTrue( ManyToOneAttributeBinding.class.isInstance( attributeBinding ) );
|
||||
ManyToOneAttributeBinding manyToOneAttributeBinding = (ManyToOneAttributeBinding) attributeBinding;
|
||||
assertEquals( simpleEntityClassName, manyToOneAttributeBinding.getReferencedEntityName() );
|
||||
assertSame( simpleEntityBinding, manyToOneAttributeBinding.getReferencedEntityBinding() );
|
||||
assertFalse( manyToOneAttributeBinding.isPropertyReference() );
|
||||
assertEquals( referencedEntityName, manyToOneAttributeBinding.getReferencedEntityName() );
|
||||
assertSame( referencedEntityBinding, manyToOneAttributeBinding.getReferencedEntityBinding() );
|
||||
assertEquals(
|
||||
referencedAttributeBinding != referencedEntityBinding.getHierarchyDetails().getEntityIdentifier().getValueBinding(),
|
||||
manyToOneAttributeBinding.isPropertyReference()
|
||||
);
|
||||
assertSame( CascadeStyle.NONE, manyToOneAttributeBinding.getCascadeStyle() );
|
||||
assertTrue( manyToOneAttributeBinding.isLazy() );
|
||||
assertSame( FetchMode.SELECT, manyToOneAttributeBinding.getFetchMode() );
|
||||
@ -148,7 +186,7 @@ public void testEntityWithManyToOneMapping() {
|
||||
assertFalse( manyToOneAttributeBinding.isAlternateUniqueKey() );
|
||||
HibernateTypeDescriptor hibernateTypeDescriptor = manyToOneAttributeBinding.getHibernateTypeDescriptor();
|
||||
Assert.assertNull( hibernateTypeDescriptor.getExplicitTypeName() );
|
||||
Assert.assertEquals( simpleEntityClassName, hibernateTypeDescriptor.getJavaTypeName() );
|
||||
Assert.assertEquals( referencedEntityName, hibernateTypeDescriptor.getJavaTypeName() );
|
||||
assertTrue( hibernateTypeDescriptor.isToOne() );
|
||||
assertTrue( hibernateTypeDescriptor.getTypeParameters().isEmpty() );
|
||||
|
||||
@ -160,12 +198,12 @@ public void testEntityWithManyToOneMapping() {
|
||||
SingularAttribute simpleEntitySingularAttribute = ( SingularAttribute ) simpleEntityAttribute;
|
||||
assertTrue( simpleEntitySingularAttribute.isTypeResolved() );
|
||||
assertSame(
|
||||
metadata.getEntityBinding( simpleEntityClassName ).getEntity(),
|
||||
metadata.getEntityBinding( referencedEntityName ).getEntity(),
|
||||
simpleEntitySingularAttribute.getSingularAttributeType()
|
||||
);
|
||||
Entity simpleEntityAttributeType = (Entity) simpleEntitySingularAttribute.getSingularAttributeType();
|
||||
assertEquals( simpleEntityClassName, simpleEntityAttributeType.getName() );
|
||||
Assert.assertEquals( simpleEntityClassName, simpleEntityAttributeType.getClassName());
|
||||
assertEquals( referencedEntityName, simpleEntityAttributeType.getName() );
|
||||
Assert.assertEquals( referencedEntityName, simpleEntityAttributeType.getClassName());
|
||||
Assert.assertTrue( simpleEntityAttributeType.isAssociation() );
|
||||
assertFalse( simpleEntityAttributeType.isComponent() );
|
||||
|
||||
@ -179,12 +217,12 @@ public void testEntityWithManyToOneMapping() {
|
||||
assertTrue( relationalValueBinding.isNullable() );
|
||||
assertTrue( relationalValueBinding.getValue() instanceof Column );
|
||||
Column column = ( Column ) relationalValueBinding.getValue();
|
||||
Assert.assertEquals( Identifier.toIdentifier( "`simpleEntity`" ), column.getColumnName() );
|
||||
Assert.assertEquals( Identifier.toIdentifier( manyToOneColumnName ), column.getColumnName() );
|
||||
assertFalse( column.isUnique() );
|
||||
JdbcDataType jdbcDataType = column.getJdbcDataType();
|
||||
Assert.assertEquals( Types.BIGINT, jdbcDataType.getTypeCode() );
|
||||
assertSame( Long.class, jdbcDataType.getJavaType() );
|
||||
assertEquals( "long", jdbcDataType.getTypeName() );
|
||||
assertEquals( referencedJdbcDataType.getTypeCode(), jdbcDataType.getTypeCode() );
|
||||
assertEquals( referencedJdbcDataType.getJavaType(), jdbcDataType.getJavaType() );
|
||||
assertEquals( referencedJdbcDataType.getTypeName(), jdbcDataType.getTypeName() );
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -53,7 +53,7 @@ public void addSourcesForSimpleVersionedEntityBinding(MetadataSources sources) {
|
||||
|
||||
@Override
|
||||
public void addSourcesForManyToOne(MetadataSources sources) {
|
||||
sources.addAnnotatedClass( ManyToOneEntity.class );
|
||||
sources.addAnnotatedClass( EntityWithManyToOnes.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -42,7 +42,7 @@ public void addSourcesForSimpleVersionedEntityBinding(MetadataSources sources) {
|
||||
}
|
||||
|
||||
public void addSourcesForManyToOne(MetadataSources sources) {
|
||||
sources.addResource( "org/hibernate/metamodel/spi/binding/ManyToOneEntity.hbm.xml" );
|
||||
sources.addResource( "org/hibernate/metamodel/spi/binding/EntityWithManyToOnes.hbm.xml" );
|
||||
}
|
||||
|
||||
public void addSourcesForComponentBinding(MetadataSources sources) {
|
||||
|
@ -4,12 +4,13 @@
|
||||
xsi:schemaLocation="http://www.hibernate.org/xsd/hibernate-mapping hibernate-mapping-4.0.xsd"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
|
||||
<class name="ManyToOneEntity">
|
||||
<class name="EntityWithManyToOnes">
|
||||
<id name="id">
|
||||
<generator class="increment"/>
|
||||
</id>
|
||||
<property name="name"/>
|
||||
<many-to-one name="simpleEntity"/>
|
||||
<many-to-one name="simpleEntityFromPropertyRef" column="simplename" property-ref="name"/>
|
||||
</class>
|
||||
|
||||
</hibernate-mapping>
|
@ -25,23 +25,27 @@
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
|
||||
/**
|
||||
* @author Gail Badner
|
||||
*/
|
||||
@Entity
|
||||
public class ManyToOneEntity {
|
||||
public class EntityWithManyToOnes {
|
||||
@Id
|
||||
private Long id;
|
||||
private String theName;
|
||||
@ManyToOne
|
||||
SimpleEntity simpleEntity;
|
||||
@ManyToOne
|
||||
@JoinColumn( name = "simplename", referencedColumnName = "name" )
|
||||
SimpleEntity simpleEntityFromPropertyRef;
|
||||
|
||||
public ManyToOneEntity() {
|
||||
public EntityWithManyToOnes() {
|
||||
}
|
||||
|
||||
public ManyToOneEntity(String name) {
|
||||
public EntityWithManyToOnes(String name) {
|
||||
this.theName = name;
|
||||
}
|
||||
|
||||
@ -69,13 +73,22 @@ public void setSimpleEntity(SimpleEntity simpleEntity) {
|
||||
this.simpleEntity = simpleEntity;
|
||||
}
|
||||
|
||||
public SimpleEntity getSimpleEntityFromPropertyRef() {
|
||||
return simpleEntityFromPropertyRef;
|
||||
}
|
||||
|
||||
public void setSimpleEntityFromPropertyRef(SimpleEntity simpleEntityFromPropertyRef) {
|
||||
this.simpleEntityFromPropertyRef = simpleEntityFromPropertyRef;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append( "EntityWithManyToOne" );
|
||||
sb.append( "EntityWithManyToOnes" );
|
||||
sb.append( "{id=" ).append( id );
|
||||
sb.append( ", theName='" ).append( theName ).append( '\'' );
|
||||
sb.append( ", simpleEntity=" ).append( simpleEntity );
|
||||
sb.append( ", simpleEntityFromPropertyRef=" ).append( simpleEntityFromPropertyRef );
|
||||
sb.append( '}' );
|
||||
return sb.toString();
|
||||
}
|
@ -8,7 +8,7 @@
|
||||
<id name="id">
|
||||
<generator class="increment"/>
|
||||
</id>
|
||||
<property name="name"/>
|
||||
<property name="name" unique="true"/>
|
||||
</class>
|
||||
|
||||
</hibernate-mapping>
|
||||
|
Loading…
x
Reference in New Issue
Block a user