Myslím, že to, co hledáte, je vysvětleno v Hibernace sekce ORM o @Any anotace
:
@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
Ale nevytvoří žádné cizí klíče. Dokonce si nemyslím, že je možné vytvořit dva cizí klíče ve stejném sloupci pro různé tabulky (má to vůbec smysl?
Případně, pokud by se dvě třídy mohly rozšířit ze společné supertřídy, můžete použít Mapování dědičnosti dosáhnout něčeho podobného.
Například:
@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 {
...
}
a poté
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Tím však vytvoříte tři tabulky. Tabulka UserEntity bude mít cizí klíč na assignedto_id sloupec. User id a LDAPUser id bude mít každé omezení na UserEntity id. V podstatě se přiblížíte tomu, na co jste se původně ptali.