下面列出了org.hibernate.mapping.ManyToOne#setForeignKeyName ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static void bindManyToOne(Element node, ManyToOne manyToOne, String path,
boolean isNullable, Mappings mappings) throws MappingException {
bindColumnsOrFormula( node, manyToOne, path, isNullable, mappings );
initOuterJoinFetchSetting( node, manyToOne );
initLaziness( node, manyToOne, mappings, true );
Attribute ukName = node.attribute( "property-ref" );
if ( ukName != null ) {
manyToOne.setReferencedPropertyName( ukName.getValue() );
}
manyToOne.setReferencedEntityName( getEntityName( node, mappings ) );
String embed = node.attributeValue( "embed-xml" );
manyToOne.setEmbedded( embed == null || "true".equals( embed ) );
String notFound = node.attributeValue( "not-found" );
manyToOne.setIgnoreNotFound( "ignore".equals( notFound ) );
if( ukName != null && !manyToOne.isIgnoreNotFound() ) {
if ( !node.getName().equals("many-to-many") ) { //TODO: really bad, evil hack to fix!!!
mappings.addSecondPass( new ManyToOneSecondPass(manyToOne) );
}
}
Attribute fkNode = node.attribute( "foreign-key" );
if ( fkNode != null ) manyToOne.setForeignKeyName( fkNode.getValue() );
validateCascade( node, path );
}
private void bindManyToOneAttribute(
final MappingDocument sourceDocument,
final SingularAttributeSourceManyToOne manyToOneSource,
ManyToOne manyToOneBinding,
String referencedEntityName) {
// NOTE : no type information to bind
manyToOneBinding.setReferencedEntityName( referencedEntityName );
if ( StringHelper.isNotEmpty( manyToOneSource.getReferencedEntityAttributeName() ) ) {
manyToOneBinding.setReferencedPropertyName( manyToOneSource.getReferencedEntityAttributeName() );
manyToOneBinding.setReferenceToPrimaryKey( false );
}
else {
manyToOneBinding.setReferenceToPrimaryKey( true );
}
manyToOneBinding.setLazy( manyToOneSource.getFetchCharacteristics().getFetchTiming() == FetchTiming.DELAYED );
manyToOneBinding.setUnwrapProxy( manyToOneSource.getFetchCharacteristics().isUnwrapProxies() );
manyToOneBinding.setFetchMode(
manyToOneSource.getFetchCharacteristics().getFetchStyle() == FetchStyle.SELECT
? FetchMode.SELECT
: FetchMode.JOIN
);
if ( manyToOneSource.isEmbedXml() == Boolean.TRUE ) {
DeprecationLogger.DEPRECATION_LOGGER.logDeprecationOfEmbedXmlSupport();
}
manyToOneBinding.setIgnoreNotFound( manyToOneSource.isIgnoreNotFound() );
if ( StringHelper.isNotEmpty( manyToOneSource.getExplicitForeignKeyName() ) ) {
manyToOneBinding.setForeignKeyName( manyToOneSource.getExplicitForeignKeyName() );
}
final ManyToOneColumnBinder columnBinder = new ManyToOneColumnBinder(
sourceDocument,
manyToOneSource,
manyToOneBinding,
referencedEntityName
);
final boolean canBindColumnsImmediately = columnBinder.canProcessImmediately();
if ( canBindColumnsImmediately ) {
columnBinder.doSecondPass( null );
}
else {
sourceDocument.getMetadataCollector().addSecondPass( columnBinder );
}
if ( !manyToOneSource.isIgnoreNotFound() ) {
// we skip creating the FK here since this setting tells us there
// cannot be a suitable/proper FK
final ManyToOneFkSecondPass fkSecondPass = new ManyToOneFkSecondPass(
sourceDocument,
manyToOneSource,
manyToOneBinding,
referencedEntityName
);
if ( canBindColumnsImmediately && fkSecondPass.canProcessImmediately() ) {
fkSecondPass.doSecondPass( null );
}
else {
sourceDocument.getMetadataCollector().addSecondPass( fkSecondPass );
}
}
manyToOneBinding.setCascadeDeleteEnabled( manyToOneSource.isCascadeDeleteEnabled() );
}