parent
5ef46f04d8
commit
6da73869ee
|
@ -1541,14 +1541,6 @@ public class HbmXmlTransformer {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void transferOneToOne(JaxbHbmOneToOneType hbmOneToOne, JaxbAttributesContainer attributes) {
|
private void transferOneToOne(JaxbHbmOneToOneType hbmOneToOne, JaxbAttributesContainer attributes) {
|
||||||
if ( !hbmOneToOne.getFormula().isEmpty() || !StringHelper.isEmpty( hbmOneToOne.getFormulaAttribute() ) ) {
|
|
||||||
handleUnsupported(
|
|
||||||
"Transformation of formulas within one-to-ones are not supported - `%s`",
|
|
||||||
origin
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final JaxbOneToOneImpl oneToOne = new JaxbOneToOneImpl();
|
final JaxbOneToOneImpl oneToOne = new JaxbOneToOneImpl();
|
||||||
oneToOne.setAttributeAccessor( hbmOneToOne.getAccess() );
|
oneToOne.setAttributeAccessor( hbmOneToOne.getAccess() );
|
||||||
oneToOne.setCascade( convertCascadeType( hbmOneToOne.getCascade() ) );
|
oneToOne.setCascade( convertCascadeType( hbmOneToOne.getCascade() ) );
|
||||||
|
@ -1558,7 +1550,10 @@ public class HbmXmlTransformer {
|
||||||
if (! StringHelper.isEmpty( hbmOneToOne.getPropertyRef() ) ) {
|
if (! StringHelper.isEmpty( hbmOneToOne.getPropertyRef() ) ) {
|
||||||
final JaxbJoinColumnImpl joinColumn = new JaxbJoinColumnImpl();
|
final JaxbJoinColumnImpl joinColumn = new JaxbJoinColumnImpl();
|
||||||
joinColumn.setReferencedColumnName( hbmOneToOne.getPropertyRef() );
|
joinColumn.setReferencedColumnName( hbmOneToOne.getPropertyRef() );
|
||||||
oneToOne.getJoinColumn().add( joinColumn );
|
oneToOne.getJoinColumns().add( joinColumn );
|
||||||
|
}
|
||||||
|
for ( String formula : hbmOneToOne.getFormula() ) {
|
||||||
|
oneToOne.getJoinFormulas().add( formula );
|
||||||
}
|
}
|
||||||
oneToOne.setName( hbmOneToOne.getName() );
|
oneToOne.setName( hbmOneToOne.getName() );
|
||||||
if ( isNotEmpty( hbmOneToOne.getEntityName() ) ) {
|
if ( isNotEmpty( hbmOneToOne.getEntityName() ) ) {
|
||||||
|
@ -1578,12 +1573,12 @@ public class HbmXmlTransformer {
|
||||||
m2o.setAttributeAccessor( hbmNode.getAccess() );
|
m2o.setAttributeAccessor( hbmNode.getAccess() );
|
||||||
m2o.setCascade( convertCascadeType( hbmNode.getCascade() ) );
|
m2o.setCascade( convertCascadeType( hbmNode.getCascade() ) );
|
||||||
if ( hbmNode.getForeignKey() != null ) {
|
if ( hbmNode.getForeignKey() != null ) {
|
||||||
m2o.setForeignKeys( new JaxbForeignKeyImpl() );
|
m2o.setForeignKey( new JaxbForeignKeyImpl() );
|
||||||
if ( "none".equalsIgnoreCase( hbmNode.getForeignKey() ) ) {
|
if ( "none".equalsIgnoreCase( hbmNode.getForeignKey() ) ) {
|
||||||
m2o.getForeignKeys().setConstraintMode( ConstraintMode.NO_CONSTRAINT );
|
m2o.getForeignKey().setConstraintMode( ConstraintMode.NO_CONSTRAINT );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m2o.getForeignKeys().setName( hbmNode.getForeignKey() );
|
m2o.getForeignKey().setName( hbmNode.getForeignKey() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1628,10 +1623,7 @@ public class HbmXmlTransformer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addFormula(String formula) {
|
public void addFormula(String formula) {
|
||||||
handleUnsupportedContent(
|
m2o.getJoinFormulas().add( formula );
|
||||||
"<many-to-one/> [name=" + hbmNode.getName() + "] specified formula [" + formula +
|
|
||||||
"] which is not supported for transformation; skipping"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ColumnDefaultsBasicImpl.INSTANCE,
|
ColumnDefaultsBasicImpl.INSTANCE,
|
||||||
|
@ -2459,8 +2451,8 @@ public class HbmXmlTransformer {
|
||||||
m2o.setName( hbmM2O.getName() );
|
m2o.setName( hbmM2O.getName() );
|
||||||
m2o.setAttributeAccessor( hbmM2O.getAccess() );
|
m2o.setAttributeAccessor( hbmM2O.getAccess() );
|
||||||
m2o.setFetch( convert( hbmM2O.getLazy() ) );
|
m2o.setFetch( convert( hbmM2O.getLazy() ) );
|
||||||
m2o.setForeignKeys( new JaxbForeignKeyImpl() );
|
m2o.setForeignKey( new JaxbForeignKeyImpl() );
|
||||||
m2o.getForeignKeys().setName( hbmM2O.getForeignKey() );
|
m2o.getForeignKey().setName( hbmM2O.getForeignKey() );
|
||||||
if ( !hbmM2O.getColumn().isEmpty() ) {
|
if ( !hbmM2O.getColumn().isEmpty() ) {
|
||||||
for ( JaxbHbmColumnType hbmColumn : hbmM2O.getColumn() ) {
|
for ( JaxbHbmColumnType hbmColumn : hbmM2O.getColumn() ) {
|
||||||
final JaxbJoinColumnImpl joinColumn = new JaxbJoinColumnImpl();
|
final JaxbJoinColumnImpl joinColumn = new JaxbJoinColumnImpl();
|
||||||
|
|
|
@ -64,7 +64,7 @@ public class ManyToOneAttributeProcessing {
|
||||||
// todo (7.0) : cascades?
|
// todo (7.0) : cascades?
|
||||||
|
|
||||||
TableProcessing.transformJoinTable( jaxbManyToOne.getJoinTable(), memberDetails, xmlDocumentContext );
|
TableProcessing.transformJoinTable( jaxbManyToOne.getJoinTable(), memberDetails, xmlDocumentContext );
|
||||||
JoinColumnProcessing.applyJoinColumns( jaxbManyToOne.getJoinColumns(), memberDetails, xmlDocumentContext );
|
JoinColumnProcessing.applyJoinColumnsOrFormula( jaxbManyToOne.getJoinColumns(), jaxbManyToOne.getJoinFormulas(), memberDetails, xmlDocumentContext );
|
||||||
if ( jaxbManyToOne.getPropertyRef() != null ) {
|
if ( jaxbManyToOne.getPropertyRef() != null ) {
|
||||||
final PropertyRefAnnotation propertyRefUsage = (PropertyRefAnnotation) memberDetails.applyAnnotationUsage(
|
final PropertyRefAnnotation propertyRefUsage = (PropertyRefAnnotation) memberDetails.applyAnnotationUsage(
|
||||||
HibernateAnnotations.PROPERTY_REF,
|
HibernateAnnotations.PROPERTY_REF,
|
||||||
|
|
|
@ -59,7 +59,7 @@ public class OneToOneAttributeProcessing {
|
||||||
applyCascading( jaxbOneToOne.getCascade(), memberDetails, xmlDocumentContext );
|
applyCascading( jaxbOneToOne.getCascade(), memberDetails, xmlDocumentContext );
|
||||||
|
|
||||||
TableProcessing.transformJoinTable( jaxbOneToOne.getJoinTable(), memberDetails, xmlDocumentContext );
|
TableProcessing.transformJoinTable( jaxbOneToOne.getJoinTable(), memberDetails, xmlDocumentContext );
|
||||||
JoinColumnProcessing.applyJoinColumns( jaxbOneToOne.getJoinColumn(), memberDetails, xmlDocumentContext );
|
JoinColumnProcessing.applyJoinColumnsOrFormula( jaxbOneToOne.getJoinColumns(), jaxbOneToOne.getJoinFormulas(), memberDetails, xmlDocumentContext );
|
||||||
JoinColumnProcessing.applyPrimaryKeyJoinColumns( jaxbOneToOne.getPrimaryKeyJoinColumn(), memberDetails, xmlDocumentContext );
|
JoinColumnProcessing.applyPrimaryKeyJoinColumns( jaxbOneToOne.getPrimaryKeyJoinColumn(), memberDetails, xmlDocumentContext );
|
||||||
|
|
||||||
if ( jaxbOneToOne.isId() == Boolean.TRUE ) {
|
if ( jaxbOneToOne.isId() == Boolean.TRUE ) {
|
||||||
|
|
|
@ -8,18 +8,24 @@ package org.hibernate.boot.models.xml.internal.db;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hibernate.annotations.JoinColumnOrFormula;
|
||||||
import org.hibernate.boot.jaxb.mapping.spi.JaxbJoinColumnImpl;
|
import org.hibernate.boot.jaxb.mapping.spi.JaxbJoinColumnImpl;
|
||||||
import org.hibernate.boot.jaxb.mapping.spi.JaxbMapKeyJoinColumnImpl;
|
import org.hibernate.boot.jaxb.mapping.spi.JaxbMapKeyJoinColumnImpl;
|
||||||
import org.hibernate.boot.jaxb.mapping.spi.JaxbPrimaryKeyJoinColumnImpl;
|
import org.hibernate.boot.jaxb.mapping.spi.JaxbPrimaryKeyJoinColumnImpl;
|
||||||
import org.hibernate.boot.jaxb.mapping.spi.db.JaxbColumnJoined;
|
import org.hibernate.boot.jaxb.mapping.spi.db.JaxbColumnJoined;
|
||||||
|
import org.hibernate.boot.models.HibernateAnnotations;
|
||||||
import org.hibernate.boot.models.JpaAnnotations;
|
import org.hibernate.boot.models.JpaAnnotations;
|
||||||
import org.hibernate.boot.models.annotations.internal.JoinColumnJpaAnnotation;
|
import org.hibernate.boot.models.annotations.internal.JoinColumnJpaAnnotation;
|
||||||
|
import org.hibernate.boot.models.annotations.internal.JoinColumnOrFormulaAnnotation;
|
||||||
import org.hibernate.boot.models.annotations.internal.JoinColumnsJpaAnnotation;
|
import org.hibernate.boot.models.annotations.internal.JoinColumnsJpaAnnotation;
|
||||||
|
import org.hibernate.boot.models.annotations.internal.JoinColumnsOrFormulasAnnotation;
|
||||||
|
import org.hibernate.boot.models.annotations.internal.JoinFormulaAnnotation;
|
||||||
import org.hibernate.boot.models.annotations.internal.MapKeyJoinColumnJpaAnnotation;
|
import org.hibernate.boot.models.annotations.internal.MapKeyJoinColumnJpaAnnotation;
|
||||||
import org.hibernate.boot.models.annotations.internal.MapKeyJoinColumnsJpaAnnotation;
|
import org.hibernate.boot.models.annotations.internal.MapKeyJoinColumnsJpaAnnotation;
|
||||||
import org.hibernate.boot.models.annotations.internal.PrimaryKeyJoinColumnJpaAnnotation;
|
import org.hibernate.boot.models.annotations.internal.PrimaryKeyJoinColumnJpaAnnotation;
|
||||||
import org.hibernate.boot.models.annotations.internal.PrimaryKeyJoinColumnsJpaAnnotation;
|
import org.hibernate.boot.models.annotations.internal.PrimaryKeyJoinColumnsJpaAnnotation;
|
||||||
import org.hibernate.boot.models.xml.spi.XmlDocumentContext;
|
import org.hibernate.boot.models.xml.spi.XmlDocumentContext;
|
||||||
|
import org.hibernate.internal.util.StringHelper;
|
||||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||||
import org.hibernate.models.spi.MutableMemberDetails;
|
import org.hibernate.models.spi.MutableMemberDetails;
|
||||||
|
|
||||||
|
@ -76,6 +82,41 @@ public class JoinColumnProcessing {
|
||||||
return joinColumns;
|
return joinColumns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void applyJoinColumnsOrFormula(
|
||||||
|
List<JaxbJoinColumnImpl> jaxbJoinColumns,
|
||||||
|
List<String> jaxbJoinFormulas,
|
||||||
|
MutableMemberDetails memberDetails,
|
||||||
|
XmlDocumentContext xmlDocumentContext) {
|
||||||
|
if ( CollectionHelper.isEmpty( jaxbJoinFormulas ) ) {
|
||||||
|
applyJoinColumns( jaxbJoinColumns, memberDetails, xmlDocumentContext );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
final JoinColumnsOrFormulasAnnotation joinColumnsOrFormulasUsage = (JoinColumnsOrFormulasAnnotation) memberDetails.replaceAnnotationUsage(
|
||||||
|
HibernateAnnotations.JOIN_COLUMN_OR_FORMULA,
|
||||||
|
HibernateAnnotations.JOIN_COLUMNS_OR_FORMULAS,
|
||||||
|
xmlDocumentContext.getModelBuildingContext()
|
||||||
|
);
|
||||||
|
|
||||||
|
final JoinColumn[] joinColumns = transformJoinColumnList( jaxbJoinColumns, xmlDocumentContext );
|
||||||
|
final JoinColumnOrFormula[] values = new JoinColumnOrFormula[ jaxbJoinColumns.size() + jaxbJoinFormulas.size() ];
|
||||||
|
joinColumnsOrFormulasUsage.value( values );
|
||||||
|
|
||||||
|
for ( int i = 0; i < joinColumns.length; i++ ) {
|
||||||
|
final JoinColumnOrFormulaAnnotation joinColumnOrFormula = HibernateAnnotations.JOIN_COLUMN_OR_FORMULA.createUsage( xmlDocumentContext.getModelBuildingContext() );
|
||||||
|
joinColumnOrFormula.column( joinColumns[i] );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( int i = 0; i < jaxbJoinFormulas.size(); i++ ) {
|
||||||
|
final JoinFormulaAnnotation joinFormula = HibernateAnnotations.JOIN_FORMULA.createUsage( xmlDocumentContext.getModelBuildingContext() );
|
||||||
|
joinFormula.value( jaxbJoinFormulas.get( i ) );
|
||||||
|
final JoinColumnOrFormulaAnnotation joinColumnOrFormula = HibernateAnnotations.JOIN_COLUMN_OR_FORMULA.createUsage( xmlDocumentContext.getModelBuildingContext() );
|
||||||
|
joinColumnOrFormula.formula( joinFormula );
|
||||||
|
values[joinColumns.length + i] = joinColumnOrFormula;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Support for {@linkplain JaxbPrimaryKeyJoinColumnImpl} to {@linkplain PrimaryKeyJoinColumns} transformation
|
* Support for {@linkplain JaxbPrimaryKeyJoinColumnImpl} to {@linkplain PrimaryKeyJoinColumns} transformation
|
||||||
*
|
*
|
||||||
|
|
|
@ -1640,10 +1640,9 @@
|
||||||
<xsd:sequence>
|
<xsd:sequence>
|
||||||
<xsd:choice>
|
<xsd:choice>
|
||||||
<xsd:sequence>
|
<xsd:sequence>
|
||||||
<xsd:element name="join-column" type="orm:join-column"
|
<xsd:element name="join-column" type="orm:join-column" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
minOccurs="0" maxOccurs="unbounded"/>
|
<xsd:element name="join-formula" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
<xsd:element name="foreign-key" type="orm:foreign-key"
|
<xsd:element name="foreign-key" type="orm:foreign-key" minOccurs="0"/>
|
||||||
minOccurs="0"/>
|
|
||||||
</xsd:sequence>
|
</xsd:sequence>
|
||||||
<xsd:element name="property-ref" type="orm:property-ref"/>
|
<xsd:element name="property-ref" type="orm:property-ref"/>
|
||||||
</xsd:choice>
|
</xsd:choice>
|
||||||
|
@ -2090,10 +2089,9 @@
|
||||||
minOccurs="0"/>
|
minOccurs="0"/>
|
||||||
</xsd:sequence>
|
</xsd:sequence>
|
||||||
<xsd:sequence>
|
<xsd:sequence>
|
||||||
<xsd:element name="join-column" type="orm:join-column"
|
<xsd:element name="join-column" type="orm:join-column" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
minOccurs="0" maxOccurs="unbounded"/>
|
<xsd:element name="join-formula" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
<xsd:element name="foreign-key" type="orm:foreign-key"
|
<xsd:element name="foreign-key" type="orm:foreign-key" minOccurs="0"/>
|
||||||
minOccurs="0"/>
|
|
||||||
</xsd:sequence>
|
</xsd:sequence>
|
||||||
<xsd:element name="join-table" type="orm:join-table"
|
<xsd:element name="join-table" type="orm:join-table"
|
||||||
minOccurs="0"/>
|
minOccurs="0"/>
|
||||||
|
|
|
@ -289,6 +289,12 @@
|
||||||
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.JaxbLockableAttribute</inheritance:implements>
|
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.JaxbLockableAttribute</inheritance:implements>
|
||||||
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.JaxbAssociationAttribute</inheritance:implements>
|
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.JaxbAssociationAttribute</inheritance:implements>
|
||||||
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.JaxbJoinTableCapable</inheritance:implements>
|
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.JaxbJoinTableCapable</inheritance:implements>
|
||||||
|
<bindings node=".//xsd:element[@name='join-column']">
|
||||||
|
<property name="joinColumns"/>
|
||||||
|
</bindings>
|
||||||
|
<bindings node=".//xsd:element[@name='join-formula']">
|
||||||
|
<property name="joinFormulas"/>
|
||||||
|
</bindings>
|
||||||
</bindings>
|
</bindings>
|
||||||
|
|
||||||
<bindings node="//xsd:complexType[@name='many-to-one']">
|
<bindings node="//xsd:complexType[@name='many-to-one']">
|
||||||
|
@ -301,8 +307,8 @@
|
||||||
<bindings node=".//xsd:element[@name='join-column']">
|
<bindings node=".//xsd:element[@name='join-column']">
|
||||||
<property name="joinColumns"/>
|
<property name="joinColumns"/>
|
||||||
</bindings>
|
</bindings>
|
||||||
<bindings node=".//xsd:element[@name='foreign-key']">
|
<bindings node=".//xsd:element[@name='join-formula']">
|
||||||
<property name="foreignKeys"/>
|
<property name="joinFormulas"/>
|
||||||
</bindings>
|
</bindings>
|
||||||
</bindings>
|
</bindings>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
|
*/
|
||||||
|
package org.hibernate.orm.test.boot.models.hbm.joinformula;
|
||||||
|
|
||||||
|
import org.hibernate.cfg.MappingSettings;
|
||||||
|
import org.hibernate.mapping.Formula;
|
||||||
|
import org.hibernate.mapping.ManyToOne;
|
||||||
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
import org.hibernate.mapping.Property;
|
||||||
|
import org.hibernate.orm.test.unconstrained.Person;
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModelScope;
|
||||||
|
import org.hibernate.testing.orm.junit.ServiceRegistry;
|
||||||
|
import org.hibernate.testing.orm.junit.Setting;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("JUnitMalformedDeclaration")
|
||||||
|
public class ManyToOneTests {
|
||||||
|
@Test
|
||||||
|
@DomainModel(xmlMappings = "org/hibernate/orm/test/unconstrained/Person.hbm.xml")
|
||||||
|
void testHbmXml(DomainModelScope domainModelScope) {
|
||||||
|
final PersistentClass personEntityBinding = domainModelScope.getDomainModel().getEntityBinding( Person.class.getName() );
|
||||||
|
validate( personEntityBinding.getProperty( "employee" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@ServiceRegistry( settings = @Setting( name= MappingSettings.TRANSFORM_HBM_XML, value = "true" ) )
|
||||||
|
@DomainModel(xmlMappings = "org/hibernate/orm/test/unconstrained/Person.hbm.xml")
|
||||||
|
void testTransformation(DomainModelScope domainModelScope) {
|
||||||
|
final PersistentClass personEntityBinding = domainModelScope.getDomainModel().getEntityBinding( Person.class.getName() );
|
||||||
|
validate( personEntityBinding.getProperty( "employee" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DomainModel(xmlMappings = "mappings/models/hbm/joinformula/many-to-one.xml")
|
||||||
|
void testMappingXml(DomainModelScope domainModelScope) {
|
||||||
|
final PersistentClass personEntityBinding = domainModelScope.getDomainModel().getEntityBinding( Person.class.getName() );
|
||||||
|
validate( personEntityBinding.getProperty( "employee" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validate(Property property) {
|
||||||
|
final ManyToOne manyToOne = (ManyToOne) property.getValue();
|
||||||
|
assertThat( manyToOne.getSelectables() ).hasSize( 1 );
|
||||||
|
assertThat( manyToOne.getSelectables().get(0) ).isInstanceOf( Formula.class );
|
||||||
|
|
||||||
|
assertThat( property.getCascade() ).isEqualTo( "all" );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
|
*/
|
||||||
|
package org.hibernate.orm.test.boot.models.hbm.joinformula;
|
||||||
|
|
||||||
|
import org.hibernate.cfg.MappingSettings;
|
||||||
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
import org.hibernate.mapping.Property;
|
||||||
|
import org.hibernate.orm.test.onetoone.formula.Person;
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModelScope;
|
||||||
|
import org.hibernate.testing.orm.junit.ServiceRegistry;
|
||||||
|
import org.hibernate.testing.orm.junit.Setting;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("JUnitMalformedDeclaration")
|
||||||
|
public class OneToOneTests {
|
||||||
|
@Test
|
||||||
|
@DomainModel(xmlMappings = "org/hibernate/orm/test/onetoone/formula/Person.hbm.xml")
|
||||||
|
void testHbmXml(DomainModelScope domainModelScope) {
|
||||||
|
final PersistentClass personEntityBinding = domainModelScope.getDomainModel().getEntityBinding( Person.class.getName() );
|
||||||
|
validateAddress( personEntityBinding.getProperty( "address" ) );
|
||||||
|
validateMailingAddress( personEntityBinding.getProperty( "mailingAddress" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@ServiceRegistry( settings = @Setting( name= MappingSettings.TRANSFORM_HBM_XML, value = "true" ) )
|
||||||
|
@DomainModel(xmlMappings = "org/hibernate/orm/test/onetoone/formula/Person.hbm.xml")
|
||||||
|
void testTransformation(DomainModelScope domainModelScope) {
|
||||||
|
final PersistentClass personEntityBinding = domainModelScope.getDomainModel().getEntityBinding( Person.class.getName() );
|
||||||
|
validateAddress( personEntityBinding.getProperty( "address" ) );
|
||||||
|
validateMailingAddress( personEntityBinding.getProperty( "mailingAddress" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DomainModel(xmlMappings = "mappings/models/hbm/joinformula/one-to-one.xml")
|
||||||
|
void testMappingXml(DomainModelScope domainModelScope) {
|
||||||
|
final PersistentClass personEntityBinding = domainModelScope.getDomainModel().getEntityBinding( Person.class.getName() );
|
||||||
|
validateAddress( personEntityBinding.getProperty( "address" ) );
|
||||||
|
validateMailingAddress( personEntityBinding.getProperty( "mailingAddress" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateAddress(Property property) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateMailingAddress(Property property) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<entity-mappings xmlns="http://www.hibernate.org/xsd/orm/mapping"
|
||||||
|
version="7.0">
|
||||||
|
|
||||||
|
<package>org.hibernate.orm.test.unconstrained</package>
|
||||||
|
|
||||||
|
<entity class="Person" metadata-complete="true">
|
||||||
|
<attributes>
|
||||||
|
<id name="name"/>
|
||||||
|
<many-to-one name="employee" target-entity="Employee">
|
||||||
|
<join-formula>employeeId</join-formula>
|
||||||
|
<cascade>
|
||||||
|
<cascade-all/>
|
||||||
|
</cascade>
|
||||||
|
</many-to-one>
|
||||||
|
</attributes>
|
||||||
|
|
||||||
|
</entity>
|
||||||
|
|
||||||
|
<entity class="Employee" metadata-complete="true">
|
||||||
|
<attributes>
|
||||||
|
<id name="id"/>
|
||||||
|
</attributes>
|
||||||
|
|
||||||
|
</entity>
|
||||||
|
|
||||||
|
</entity-mappings>
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
~
|
||||||
|
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
~ See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<entity-mappings xmlns="http://www.hibernate.org/xsd/orm/mapping"
|
||||||
|
version="7.0">
|
||||||
|
<package>org.hibernate.orm.test.onetoone.formula</package>
|
||||||
|
<access>FIELD</access>
|
||||||
|
|
||||||
|
<entity class="Person" metadata-complete="true">
|
||||||
|
<attributes>
|
||||||
|
<id name="name"/>
|
||||||
|
|
||||||
|
<one-to-one name="address">
|
||||||
|
<join-formula>name</join-formula>
|
||||||
|
<join-formula>'HOME'</join-formula>
|
||||||
|
</one-to-one>
|
||||||
|
</attributes>
|
||||||
|
</entity>
|
||||||
|
|
||||||
|
<entity class="Address">
|
||||||
|
<table>
|
||||||
|
<check-constraint constraint="addressType in ('MAILING', 'HOME', 'BUSINESS')"/>
|
||||||
|
</table>
|
||||||
|
<attributes>
|
||||||
|
<id name="person"/>
|
||||||
|
<id name="type"/>
|
||||||
|
<basic name="street"/>
|
||||||
|
<basic name="state"/>
|
||||||
|
<basic name="zip"/>
|
||||||
|
</attributes>
|
||||||
|
</entity>
|
||||||
|
</entity-mappings>
|
Loading…
Reference in New Issue