Я думал об этом, и я нашел решение. В случае отношения многих ко многим я использовал
@ManyToMany
@JoinTable(name = "core_auth_role", joinColumns = { @JoinColumn(name = "auth_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") }, uniqueConstraints = { @UniqueConstraint(columnNames = {
"role_id", "auth_id" }) })
@ForeignKey(name = "fk_testkey", inverseName = "fk_testkey_inverse")
private Set<Role> roles;
В результате у меня есть два idex (auth_id, role_id) и (role_id, auth_id).
Схема, созданная Hibernate:
create table SOME_TABLE (
...
primary key (auth_id, role_id),
unique (role_id, auth_id)
);
первичный ключ и уникальный cosntrainst автоматически индексируются в базе данных.