Note: This issue is very similar to https://hibernate.atlassian.net/browse/HHH-16943 but the same problem happens for composite primary keys. Given
@Entity
@IdClass( CompositePrimaryKey.class )
static class TestEntity {
@Id private String b;
@Id private String a;
}
private static class CompositePrimaryKey {
private String b;
private String a;
}
Note that we define the composite primary key on the columns (b, a) (in that very order). The column order could be important since the underlying primary key index should be used to speed-up queries that select all entities for a given value of “b”. Actual vs. Expected When the schema gets created in the context of a JPA EntityManagerFactory, the columns are (re-)ordered during construction of the SessionFactoryImpl, Line 252: bootMetamodel.orderColumns( false ) This leads to the following DDL:
create table "TestEntity" (
a varchar(255) not null,
b varchar(255) not null,
primary key (a, b)
)
Note that the primary key is created for (a, b) instead of the expected column order (b, a). Workaround One can restore the behavior of Hibernate 6.1 by switching to the legacy column ordering strategy via hibernate.column_ordering_strategy=legacy. Test Case Upcoming… |