mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-21 02:25:22 +00:00
HHH-10978 - Fix building join table metadata with default catalogs or schema values.
(cherry picked from commit 1dcb391f83b771942e40919ba8081bcaff7be0ea) Conflicts: hibernate-core/src/main/java/org/hibernate/cfg/BinderHelper.java hibernate-core/src/main/java/org/hibernate/cfg/annotations/TableBinder.java
This commit is contained in:
parent
c60287264f
commit
4a60011cb7
@ -59,7 +59,7 @@ public class BinderHelper {
|
||||
|
||||
public static final String ANNOTATION_STRING_DEFAULT = "";
|
||||
|
||||
private static final CoreMessageLogger LOG = Logger.getMessageLogger(CoreMessageLogger.class, BinderHelper.class.getName());
|
||||
private static final CoreMessageLogger LOG = Logger.getMessageLogger( CoreMessageLogger.class, BinderHelper.class.getName() );
|
||||
|
||||
private BinderHelper() {
|
||||
}
|
||||
@ -237,7 +237,9 @@ public static void createSyntheticPropertyReference(
|
||||
boolean inverse,
|
||||
MetadataBuildingContext context) {
|
||||
//associated entity only used for more precise exception, yuk!
|
||||
if ( columns[0].isImplicit() || StringHelper.isNotEmpty( columns[0].getMappedBy() ) ) return;
|
||||
if ( columns[0].isImplicit() || StringHelper.isNotEmpty( columns[0].getMappedBy() ) ) {
|
||||
return;
|
||||
}
|
||||
int fkEnum = Ejb3JoinColumn.checkReferencedColumnsType( columns, ownerEntity, context );
|
||||
PersistentClass associatedClass = columns[0].getPropertyHolder() != null ?
|
||||
columns[0].getPropertyHolder().getPersistentClass() :
|
||||
@ -407,13 +409,18 @@ else if ( columnOwner instanceof Join ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( !found ) return null; //have to find it the hard way
|
||||
if ( !found ) {
|
||||
//have to find it the hard way
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return orderedProperties;
|
||||
}
|
||||
|
||||
private static void matchColumnsByProperty(Property property, Map<Column, Set<Property>> columnsToProperty) {
|
||||
if ( property == null ) return;
|
||||
if ( property == null ) {
|
||||
return;
|
||||
}
|
||||
if ( "noop".equals( property.getPropertyAccessorName() )
|
||||
|| "embedded".equals( property.getPropertyAccessorName() ) ) {
|
||||
return;
|
||||
@ -428,7 +435,8 @@ private static void matchColumnsByProperty(Property property, Map<Column, Set<Pr
|
||||
else {
|
||||
Iterator columnIt = property.getColumnIterator();
|
||||
while ( columnIt.hasNext() ) {
|
||||
Object column = columnIt.next(); //can be a Formula so we don't cast
|
||||
//can be a Formula so we don't cast
|
||||
Object column = columnIt.next();
|
||||
//noinspection SuspiciousMethodCalls
|
||||
if ( columnsToProperty.containsKey( column ) ) {
|
||||
columnsToProperty.get( column ).add( property );
|
||||
@ -464,7 +472,9 @@ public static Property findPropertyByName(PersistentClass associatedClass, Strin
|
||||
property = associatedClass.getProperty( element );
|
||||
}
|
||||
else {
|
||||
if ( !property.isComposite() ) return null;
|
||||
if ( !property.isComposite() ) {
|
||||
return null;
|
||||
}
|
||||
property = ( (Component) property.getValue() ).getProperty( element );
|
||||
}
|
||||
}
|
||||
@ -473,7 +483,9 @@ public static Property findPropertyByName(PersistentClass associatedClass, Strin
|
||||
catch (MappingException e) {
|
||||
try {
|
||||
//if we do not find it try to check the identifier mapper
|
||||
if ( associatedClass.getIdentifierMapper() == null ) return null;
|
||||
if ( associatedClass.getIdentifierMapper() == null ) {
|
||||
return null;
|
||||
}
|
||||
StringTokenizer st = new StringTokenizer( propertyName, ".", false );
|
||||
while ( st.hasMoreElements() ) {
|
||||
String element = (String) st.nextElement();
|
||||
@ -481,7 +493,9 @@ public static Property findPropertyByName(PersistentClass associatedClass, Strin
|
||||
property = associatedClass.getIdentifierMapper().getProperty( element );
|
||||
}
|
||||
else {
|
||||
if ( !property.isComposite() ) return null;
|
||||
if ( !property.isComposite() ) {
|
||||
return null;
|
||||
}
|
||||
property = ( (Component) property.getValue() ).getProperty( element );
|
||||
}
|
||||
}
|
||||
@ -512,7 +526,9 @@ public static Property findPropertyByName(Component component, String propertyNa
|
||||
property = component.getProperty( element );
|
||||
}
|
||||
else {
|
||||
if ( !property.isComposite() ) return null;
|
||||
if ( !property.isComposite() ) {
|
||||
return null;
|
||||
}
|
||||
property = ( (Component) property.getValue() ).getProperty( element );
|
||||
}
|
||||
}
|
||||
@ -521,7 +537,9 @@ public static Property findPropertyByName(Component component, String propertyNa
|
||||
catch (MappingException e) {
|
||||
try {
|
||||
//if we do not find it try to check the identifier mapper
|
||||
if ( component.getOwner().getIdentifierMapper() == null ) return null;
|
||||
if ( component.getOwner().getIdentifierMapper() == null ) {
|
||||
return null;
|
||||
}
|
||||
StringTokenizer st = new StringTokenizer( propertyName, ".", false );
|
||||
while ( st.hasMoreElements() ) {
|
||||
String element = (String) st.nextElement();
|
||||
@ -529,7 +547,9 @@ public static Property findPropertyByName(Component component, String propertyNa
|
||||
property = component.getOwner().getIdentifierMapper().getProperty( element );
|
||||
}
|
||||
else {
|
||||
if ( !property.isComposite() ) return null;
|
||||
if ( !property.isComposite() ) {
|
||||
return null;
|
||||
}
|
||||
property = ( (Component) property.getValue() ).getProperty( element );
|
||||
}
|
||||
}
|
||||
@ -542,7 +562,9 @@ public static Property findPropertyByName(Component component, String propertyNa
|
||||
}
|
||||
|
||||
public static String getRelativePath(PropertyHolder propertyHolder, String propertyName) {
|
||||
if ( propertyHolder == null ) return propertyName;
|
||||
if ( propertyHolder == null ) {
|
||||
return propertyName;
|
||||
}
|
||||
String path = propertyHolder.getPath();
|
||||
String entityName = propertyHolder.getPersistentClass().getEntityName();
|
||||
if ( path.length() == entityName.length() ) {
|
||||
@ -562,7 +584,8 @@ public static Object findColumnOwner(
|
||||
String columnName,
|
||||
MetadataBuildingContext context) {
|
||||
if ( StringHelper.isEmpty( columnName ) ) {
|
||||
return persistentClass; //shortcut for implicit referenced column names
|
||||
//shortcut for implicit referenced column names
|
||||
return persistentClass;
|
||||
}
|
||||
PersistentClass current = persistentClass;
|
||||
Object result;
|
||||
@ -656,7 +679,9 @@ public static void makeIdGenerator(
|
||||
params.setProperty( (String) elt.getKey(), (String) elt.getValue() );
|
||||
}
|
||||
}
|
||||
if ( "assigned".equals( generatorType ) ) id.setNullValue( "undefined" );
|
||||
if ( "assigned".equals( generatorType ) ) {
|
||||
id.setNullValue( "undefined" );
|
||||
}
|
||||
id.setIdentifierGeneratorProperties( params );
|
||||
}
|
||||
|
||||
@ -679,6 +704,10 @@ public static boolean isEmptyAnnotationValue(String annotationString) {
|
||||
//equivalent to (but faster) ANNOTATION_STRING_DEFAULT.equals( annotationString );
|
||||
}
|
||||
|
||||
public static boolean isEmptyOrNullAnnotationValue(String annotationString) {
|
||||
return annotationString == null || annotationString.length() == 0;
|
||||
}
|
||||
|
||||
public static Any buildAnyValue(
|
||||
String anyMetaDefName,
|
||||
Ejb3JoinColumn[] columns,
|
||||
@ -722,7 +751,9 @@ public static Any buildAnyValue(
|
||||
throw new MappingException( "could not interpret metaValue", e );
|
||||
}
|
||||
}
|
||||
if ( !values.isEmpty() ) value.setMetaValues( values );
|
||||
if ( !values.isEmpty() ) {
|
||||
value.setMetaValues( values );
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw new AnnotationException( "Unable to find @AnyMetaDef for an @(ManyTo)Any mapping: "
|
||||
@ -792,7 +823,8 @@ private static void checkAnyMetaDefValidity(boolean mustHaveName, AnyMetaDef def
|
||||
|
||||
private static void bindAnyMetaDef(AnyMetaDef defAnn, MetadataBuildingContext context) {
|
||||
if ( isEmptyAnnotationValue( defAnn.name() ) ) {
|
||||
return; //don't map not named definitions
|
||||
//don't map not named definitions
|
||||
return;
|
||||
}
|
||||
if ( LOG.isDebugEnabled() ) {
|
||||
LOG.debugf( "Binding Any Meta definition: %s", defAnn.name() );
|
||||
@ -863,9 +895,9 @@ static PropertyData getPropertyOverriddenByMapperOrMapsId(
|
||||
|
||||
public static Map<String,String> toAliasTableMap(SqlFragmentAlias[] aliases){
|
||||
Map<String,String> ret = new HashMap<String,String>();
|
||||
for (int i = 0; i < aliases.length; i++){
|
||||
if (StringHelper.isNotEmpty(aliases[i].table())){
|
||||
ret.put(aliases[i].alias(), aliases[i].table());
|
||||
for ( int i = 0; i < aliases.length; i++ ){
|
||||
if ( StringHelper.isNotEmpty( aliases[i].table() ) ){
|
||||
ret.put( aliases[i].alias(), aliases[i].table() );
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
@ -875,7 +907,7 @@ public static Map<String,String> toAliasEntityMap(SqlFragmentAlias[] aliases){
|
||||
Map<String,String> ret = new HashMap<String,String>();
|
||||
for (int i = 0; i < aliases.length; i++){
|
||||
if (aliases[i].entity() != void.class){
|
||||
ret.put(aliases[i].alias(), aliases[i].entity().getName());
|
||||
ret.put( aliases[i].alias(), aliases[i].entity().getName() );
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
@ -53,7 +53,7 @@
|
||||
@SuppressWarnings("unchecked")
|
||||
public class TableBinder {
|
||||
//TODO move it to a getter/setter strategy
|
||||
private static final CoreMessageLogger LOG = Logger.getMessageLogger(CoreMessageLogger.class, TableBinder.class.getName());
|
||||
private static final CoreMessageLogger LOG = Logger.getMessageLogger( CoreMessageLogger.class, TableBinder.class.getName() );
|
||||
|
||||
MetadataBuildingContext buildingContext;
|
||||
|
||||
@ -487,10 +487,10 @@ public static Table buildAndFillTable(
|
||||
MetadataBuildingContext buildingContext,
|
||||
String subselect,
|
||||
InFlightMetadataCollector.EntityTableXref denormalizedSuperTableXref) {
|
||||
schema = BinderHelper.isEmptyAnnotationValue( schema )
|
||||
schema = BinderHelper.isEmptyOrNullAnnotationValue( schema )
|
||||
? extract( buildingContext.getMetadataCollector().getDatabase().getDefaultNamespace().getPhysicalName().getSchema() )
|
||||
: schema;
|
||||
catalog = BinderHelper.isEmptyAnnotationValue( catalog )
|
||||
catalog = BinderHelper.isEmptyOrNullAnnotationValue( catalog )
|
||||
? extract( buildingContext.getMetadataCollector().getDatabase().getDefaultNamespace().getPhysicalName().getCatalog() )
|
||||
: catalog;
|
||||
|
||||
@ -668,7 +668,8 @@ else if ( value instanceof DependantValue ) {
|
||||
//explicit referencedColumnName
|
||||
Iterator idColItr = referencedEntity.getKey().getColumnIterator();
|
||||
org.hibernate.mapping.Column col;
|
||||
Table table = referencedEntity.getTable(); //works cause the pk has to be on the primary table
|
||||
//works cause the pk has to be on the primary table
|
||||
Table table = referencedEntity.getTable();
|
||||
if ( !idColItr.hasNext() ) {
|
||||
LOG.debug( "No column in the identifier!" );
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user