Given
@Entity
@Table(uniqueConstraints = @UniqueConstraint(name = "uk_b_a", columnNames = { "b", "a" }))
class TestEntity {
@Id
private Long id;
private String b;
private String a;
}
Note that we define an explicit unique constraint on the columns (b, a) (in that very order). The column order could be important since the underlying unique 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" (
id bigint not null,
a varchar(255),
b varchar(255),
primary key (id),
constraint uk_b_a unique (a, b)
);
Note that “uk_b_a” is created with columns (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: I’ll submit a PR with a unit test for this issue. |