Acho que o que você está procurando está explicado no Seção Hibernate ORM sobre
@Any
anotação
:@Any(metaColumn = @Column(name = "userType"))
@AnyMetaDef(name = "PropertyMetaDef", metaType = "string", idType = "long",
metaValues = {
@MetaValue(value = "User", targetEntity = User.class),
@MetaValue(value = "LDAP", targetEntity = LDAPUser.class)
}
)
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private Object assignedTo
Mas não criará nenhuma chave estrangeira. Eu nem acho que seja possível criar duas chaves estrangeiras na mesma coluna para tabelas diferentes (isso faz sentido?).
Como alternativa, se as duas classes puderem se estender de uma superclasse comum, você poderá usar Mapeamento de herança para conseguir algo semelhante.
Por exemplo:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public static class UserEntity {
@Id
private Long id;
...
}
@Entity
public class User extends UserEntity {
...
}
@Entity
public class LDAPUser extends UserEntity {
...
}
e depois
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Isso criará três tabelas. A tabela
UserEntity
terá uma chave estrangeira no assignedto_id
coluna. User
id e LDAPUser
id terá uma restrição em cada UserEntity
Eu iria. Basicamente, chegando perto do que você pediu originalmente.