Я использую Spring Data JPA и PostgreSQL 10.
Учитывая классы
@Entity
@Table(name = "test_table")
@IdClass(TestTableId.class)
public class TestTable {
@Id
private int b;
@Id
private int a;
private int c;
// Getters, setters, hashCode() and equals()
}
а также
public class TestTableId implements Serializable {
private int b;
private int a;
// Constructors, getters, setters, hashCode() and equals()
}
В БД таблица создается спящим через
CREATE TABLE test_table
(
a integer NOT NULL,
b integer NOT NULL,
c integer NOT NULL,
CONSTRAINT test_table_pkey PRIMARY KEY (a, b)
)
Я хочу PRIMARY KEY (a, b) вместо PRIMARY KEY (b, a) по соображениям производительности. Как я могу этого добиться, не переименовывая столбцы?




Попробуйте @Embeddable для составных ключей
@Embeddable
public class key implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "a")
private String a;
@Column(name = "b")
private String b;
}
public class App implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private Key id;
}
Это не помогает. Даже если я поменяю местами a и b, я получу CONSTRAINT test_table_pkey PRIMARY KEY (a, b) вместо ... PRIMARY KEY (b, a).
Спецификация JPA не допускает механизма для определения порядка столбцов в определении схемы. Некоторые провайдеры JPA (например, DataNucleus) позволяют расширение для этого. Не знаю о вашем провайдере. Вы можете просто определить схему самостоятельно.