Eu não tenho reputação de ponto para comentar então vou colocar aqui meus comentários:
Por que o campo instalationPK não está em instalation.class??Você deve colocar
@EmbeddedId
no campo installationPK em Installation.class. Eu não se faz diferença, mas coloco joinCollums no campo em
BaseEntity
:@OneToOne
@JoinColumns({
@JoinColumn(name = "site", referencedColumnName = "site"),
@JoinColumn(name = "structure", referencedColumnName = "structure")
})
private Installation installation;