Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister {

// the closure of all columns used by the entire hierarchy including
// subclasses and superclasses of this class
private final int[] subclassColumnTableNumberClosure;
private final int[] subclassColumnNaturalOrderTableNumberClosure;
// private final int[] subclassFormulaTableNumberClosure;
private final String[] subclassColumnClosure;

Expand Down Expand Up @@ -470,11 +470,12 @@ public JoinedSubclassEntityPersister(
final String tableName = property.getValue().getTable().
getQualifiedName( creationContext.getSqlStringGenerationContext() );
final Integer tableNumber = getTableId( tableName, subclassTableNameClosure );
final Integer naturalTableNumber = getTableId( tableName, naturalOrderSubclassTableNameClosure );
propTableNumbers.add( tableNumber );

for ( Selectable selectable : property.getSelectables() ) {
if ( !selectable.isFormula() ) {
columnTableNumbers.add( tableNumber );
columnTableNumbers.add( naturalTableNumber );
Column column = (Column) selectable;
columns.add( column.getQuotedName( dialect ) );
}
Expand All @@ -484,7 +485,7 @@ public JoinedSubclassEntityPersister(
}
}

subclassColumnTableNumberClosure = toIntArray( columnTableNumbers );
subclassColumnNaturalOrderTableNumberClosure = toIntArray( columnTableNumbers );
subclassPropertyTableNumberClosure = toIntArray( propTableNumbers );
// subclassFormulaTableNumberClosure = ArrayHelper.toIntArray( formulaTableNumbers );
subclassColumnClosure = toStringArray( columns );
Expand Down Expand Up @@ -1069,12 +1070,12 @@ public int determineTableNumberForColumn(String columnName) {
&& subclassColumnClosure[i].endsWith( "\"" );
if ( quoted ) {
if ( subclassColumnClosure[i].equals( columnName ) ) {
return subclassColumnTableNumberClosure[i];
return subclassColumnNaturalOrderTableNumberClosure[i];
}
}
else {
if ( subclassColumnClosure[i].equalsIgnoreCase( columnName ) ) {
return subclassColumnTableNumberClosure[i];
return subclassColumnNaturalOrderTableNumberClosure[i];
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* 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.persister.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Inheritance;
import jakarta.persistence.Table;
import org.hibernate.metamodel.MappingMetamodel;
import org.hibernate.metamodel.model.domain.internal.JpaMetamodelImpl;
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
import org.hibernate.testing.orm.junit.JiraKey;
import org.hibernate.testing.orm.junit.Jpa;
import org.junit.jupiter.api.Test;

import static jakarta.persistence.InheritanceType.JOINED;
import static org.junit.jupiter.api.Assertions.assertEquals;

/**
* @author Vincent Bouthinon
*/
@Jpa(
annotatedClasses = {
JoinedSubclassEntityPersisterTest.Animal.class,
JoinedSubclassEntityPersisterTest.Dog.class,
}
)
@JiraKey("HHH-18703")
class JoinedSubclassEntityPersisterTest {

@Test
void the_table_name_must_match_the_attribute_s_column(EntityManagerFactoryScope scope) {
scope.inTransaction(
entityManager -> {
JpaMetamodelImpl metamodel = (JpaMetamodelImpl) entityManager.getMetamodel();
MappingMetamodel mappingMetamodel = metamodel.getMappingMetamodel();
AbstractEntityPersister entityDescriptor = (AbstractEntityPersister) mappingMetamodel.getEntityDescriptor( Dog.class );
String table = entityDescriptor.getTableName( entityDescriptor.determineTableNumberForColumn( "name" ) );
assertEquals( "TANIMAL", table );
}
);
}

@Entity
@Inheritance(strategy = JOINED)
@Table(name = "TANIMAL")
public static class Animal {

@Id
@GeneratedValue
public Integer id;

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

@Entity
@Table(name = "TDOG")
public static class Dog extends Animal {

}
}
Loading