воскресенье, июля 31, 2011

@Index on @Emebeddable (Components) properties in hibernate

Spend about a hour to understand how to apply @Index on several properties of @Embeddable (Components) in Hibernate. To compensate lack of documentation posting example here:

@Embeddable
@AttributeOverrides({
@AttributeOverride(
name = "instanceMnemo",
column = @Column(name = "subscriber_instance_mnemo")
),
@AttributeOverride(
name = "localId",
column = @Column(name = "subscriber_local_id")
)
})
public final class SubscriberId {
//...
private final int instanceMnemo;
private final BigDecimal localId;
}

@Entity
@org.hibernate.annotations.Table(
appliesTo = "incident",
indexes = {
@Index(
name = "incidnet_subscriber_idx",
columnNames = {"subscriber_instance_mnemo", "subscriber_local_id"}
)
}
)
public class Incident {
@Embedded
private SubscriberId subscriberId;

//...

This results that on "incident" table will be created complex index of "subscriber_instance_mnemo" and "subscriber_local_id" columns