HHH-18341 fix the issue simply by removing obsolete code

also take the opportunity to "do" a todo

Signed-off-by: Gavin King <gavin@hibernate.org>
This commit is contained in:
Gavin King 2024-08-28 23:19:52 +02:00
parent 5baf866f16
commit 8eb4d8da0d
6 changed files with 17 additions and 40 deletions

View File

@ -237,10 +237,10 @@ public abstract class AbstractPropertyHolder implements PropertyHolder {
public Column[] getOverriddenColumn(String propertyName) { public Column[] getOverriddenColumn(String propertyName) {
final Column[] result = getExactOverriddenColumn( propertyName ); final Column[] result = getExactOverriddenColumn( propertyName );
if ( result == null ) { if ( result == null ) {
if ( propertyName.contains( ".collection&&element." ) ) { if ( propertyName.contains( ".{element}." ) ) {
//support for non map collections where no prefix is needed //support for non map collections where no prefix is needed
//TODO cache the underlying regexp //TODO cache the underlying regexp
return getExactOverriddenColumn( propertyName.replace( ".collection&&element.", "." ) ); return getExactOverriddenColumn( propertyName.replace( ".{element}.", "." ) );
} }
} }
return result; return result;
@ -294,10 +294,10 @@ public abstract class AbstractPropertyHolder implements PropertyHolder {
@Override @Override
public JoinColumn[] getOverriddenJoinColumn(String propertyName) { public JoinColumn[] getOverriddenJoinColumn(String propertyName) {
final JoinColumn[] result = getExactOverriddenJoinColumn( propertyName ); final JoinColumn[] result = getExactOverriddenJoinColumn( propertyName );
if ( result == null && propertyName.contains( ".collection&&element." ) ) { if ( result == null && propertyName.contains( ".{element}." ) ) {
//support for non map collections where no prefix is needed //support for non map collections where no prefix is needed
//TODO cache the underlying regexp //TODO cache the underlying regexp
return getExactOverriddenJoinColumn( propertyName.replace( ".collection&&element.", "." ) ); return getExactOverriddenJoinColumn( propertyName.replace( ".{element}.", "." ) );
} }
return result; return result;
} }
@ -325,10 +325,10 @@ public abstract class AbstractPropertyHolder implements PropertyHolder {
@Override @Override
public ForeignKey getOverriddenForeignKey(String propertyName) { public ForeignKey getOverriddenForeignKey(String propertyName) {
final ForeignKey result = getExactOverriddenForeignKey( propertyName ); final ForeignKey result = getExactOverriddenForeignKey( propertyName );
if ( result == null && propertyName.contains( ".collection&&element." ) ) { if ( result == null && propertyName.contains( ".{element}." ) ) {
//support for non map collections where no prefix is needed //support for non map collections where no prefix is needed
//TODO cache the underlying regexp //TODO cache the underlying regexp
return getExactOverriddenForeignKey( propertyName.replace( ".collection&&element.", "." ) ); return getExactOverriddenForeignKey( propertyName.replace( ".{element}.", "." ) );
} }
return result; return result;
} }
@ -371,10 +371,10 @@ public abstract class AbstractPropertyHolder implements PropertyHolder {
*/ */
public JoinTable getOverriddenJoinTable(String propertyName) { public JoinTable getOverriddenJoinTable(String propertyName) {
final JoinTable result = getExactOverriddenJoinTable( propertyName ); final JoinTable result = getExactOverriddenJoinTable( propertyName );
if ( result == null && propertyName.contains( ".collection&&element." ) ) { if ( result == null && propertyName.contains( ".{element}." ) ) {
//support for non map collections where no prefix is needed //support for non map collections where no prefix is needed
//TODO cache the underlying regexp //TODO cache the underlying regexp
return getExactOverriddenJoinTable( propertyName.replace( ".collection&&element.", "." ) ); return getExactOverriddenJoinTable( propertyName.replace( ".{element}.", "." ) );
} }
return result; return result;
} }

View File

@ -400,9 +400,9 @@ public class AnnotatedColumn {
); );
// HHH-6005 magic // HHH-6005 magic
if ( implicitName.getText().contains( "_collection&&element_" ) ) { if ( implicitName.getText().contains( "_{element}_" ) ) {
implicitName = Identifier.toIdentifier( implicitName = Identifier.toIdentifier(
implicitName.getText().replace( "_collection&&element_", "_" ), implicitName.getText().replace( "_{element}_", "_" ),
implicitName.isQuoted() implicitName.isQuoted()
); );
} }

View File

@ -445,9 +445,9 @@ public class AnnotatedJoinColumns extends AnnotatedColumns {
new OwnedImplicitJoinColumnNameSource(referencedEntity, logicalTableName, logicalReferencedColumn) new OwnedImplicitJoinColumnNameSource(referencedEntity, logicalTableName, logicalReferencedColumn)
); );
// HHH-11826 magic. See AnnotatedColumn and the HHH-6005 comments // HHH-11826 magic. See AnnotatedColumn and the HHH-6005 comments
if ( columnIdentifier.getText().contains( "_collection&&element_" ) ) { if ( columnIdentifier.getText().contains( "_{element}_" ) ) {
columnIdentifier = Identifier.toIdentifier( columnIdentifier = Identifier.toIdentifier(
columnIdentifier.getText().replace( "_collection&&element_", "_" ), columnIdentifier.getText().replace( "_{element}_", "_" ),
columnIdentifier.isQuoted() columnIdentifier.isQuoted()
); );
} }

View File

@ -2490,8 +2490,8 @@ public abstract class CollectionBinder {
return new PropertyPreloadedData( AccessType.PROPERTY, "element", elementClass ); return new PropertyPreloadedData( AccessType.PROPERTY, "element", elementClass );
} }
else { else {
//"collection&&element" is not a valid property name => placeholder //"{element}" is not a valid property name => placeholder
return new PropertyPreloadedData( AccessType.PROPERTY, "collection&&element", elementClass ); return new PropertyPreloadedData( AccessType.PROPERTY, "{element}", elementClass );
} }
} }
} }

View File

@ -6,22 +6,13 @@
*/ */
package org.hibernate.boot.model.source.spi; package org.hibernate.boot.model.source.spi;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.hibernate.internal.util.StringHelper; import org.hibernate.internal.util.StringHelper;
/** /**
* @author Steve Ebersole * @author Steve Ebersole
*/ */
public abstract class AbstractAttributeKey { public abstract class AbstractAttributeKey {
// todo : replace this with "{element}" private static final String COLLECTION_ELEMENT = "{element}";
private static final String COLLECTION_ELEMENT = "collection&&element";
private static final String DOT_COLLECTION_ELEMENT = '.' + COLLECTION_ELEMENT;
private static final Pattern DOT_COLLECTION_ELEMENT_PATTERN = Pattern.compile(
DOT_COLLECTION_ELEMENT,
Pattern.LITERAL
);
private final AbstractAttributeKey parent; private final AbstractAttributeKey parent;
private final String property; private final String property;
@ -125,26 +116,12 @@ public abstract class AbstractAttributeKey {
* Does this part represent a collection-element reference? * Does this part represent a collection-element reference?
* *
* @return {@code true} if the current property is a collection element * @return {@code true} if the current property is a collection element
* marker ({@link #COLLECTION_ELEMENT} * marker {@value #COLLECTION_ELEMENT}
*/ */
public boolean isCollectionElement() { public boolean isCollectionElement() {
return COLLECTION_ELEMENT.equals( property ); return COLLECTION_ELEMENT.equals( property );
} }
/**
* Does any part represent a collection-element reference?
*
* @return {@code true} if this part or any parent part is a collection element
* marker ({@link #COLLECTION_ELEMENT}.
*/
public boolean isPartOfCollectionElement() {
return fullPath.contains( DOT_COLLECTION_ELEMENT );
}
public String stripCollectionElementMarker() {
return DOT_COLLECTION_ELEMENT_PATTERN.matcher( fullPath ).replaceAll( Matcher.quoteReplacement( "" ) );
}
@Override @Override
public String toString() { public String toString() {
return getFullPath(); return getFullPath();

View File

@ -21,7 +21,7 @@ public class AttributePathTest {
@Test @Test
@TestForIssue(jiraKey = "HHH-10863") @TestForIssue(jiraKey = "HHH-10863")
public void testCollectionElement() { public void testCollectionElement() {
AttributePath attributePath = AttributePath.parse( "items.collection&&element.name" ); AttributePath attributePath = AttributePath.parse( "items.{element}.name" );
assertFalse( attributePath.isCollectionElement() ); assertFalse( attributePath.isCollectionElement() );
assertTrue( attributePath.getParent().isCollectionElement() ); assertTrue( attributePath.getParent().isCollectionElement() );